tapping/swiping 返回时图像与之前的视图重叠
Image overlaps previous view when tapping/swiping back
我有一个 UIScrollView
完全涵盖了我的一个观点。我在同一个视图中添加了一个背景图像,它以与实际 UIScrollView
略有不同的速率滚动。除非我使用向后滑动手势或点击 'Back' 按钮,否则这绝对没问题。发生的情况是图像在消失前覆盖视图约 0.5 秒,看起来很糟糕。
这就是我的意思:
如您所见,这是手势的中途,您无法看到之前的视图,而只能看到图像左侧的部分。它不会出现在 UIScrollView
的第一页上,所以我猜这是因为图像与之前的视图重叠。
这是我的代码:
override func viewDidLoad() {
let pagesScrollViewSize = scrollView.frame.size
scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(images.count), height: pagesScrollViewSize.height)
backgroundImageView.frame = CGRect(x: 0, y: 0, width: 2484, height: 736)
backgroundImageView.image = UIImage(named: "SF.png")
var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView
visualEffectView.frame = backgroundImageView.bounds
backgroundImageView.addSubview(visualEffectView)
view.addSubview(backgroundImageView)
view.sendSubviewToBack(backgroundImageView)
scrollView.backgroundColor = UIColor.clearColor()
}
func scrollViewDidScroll(scrollView: UIScrollView) {
loadVisiblePages()
var factor = scrollView.contentOffset.x / (scrollView.contentSize.width - 414);
if factor < 0 {
factor = 0
}
if factor > 1 {
factor = 1
}
var frame: CGRect = backgroundImageView.frame
frame.origin.x = factor * (414 - backgroundImageView.frame.size.width)
backgroundImageView.frame = frame
}
有人有什么建议吗?
您必须在 viewDidLoad
函数中添加以下内容:
self.view.clipsToBounds = true
或 scrollView.clipsToBounds = true
如果您只想剪辑 UIScrollView
中的子视图。
将此值设置为 true
会导致子视图被裁剪到接收器的边界。如果设置为 false,则其帧超出接收器可见边界的子视图不会被剪裁。默认值为 false
.
我有一个 UIScrollView
完全涵盖了我的一个观点。我在同一个视图中添加了一个背景图像,它以与实际 UIScrollView
略有不同的速率滚动。除非我使用向后滑动手势或点击 'Back' 按钮,否则这绝对没问题。发生的情况是图像在消失前覆盖视图约 0.5 秒,看起来很糟糕。
这就是我的意思:
如您所见,这是手势的中途,您无法看到之前的视图,而只能看到图像左侧的部分。它不会出现在 UIScrollView
的第一页上,所以我猜这是因为图像与之前的视图重叠。
这是我的代码:
override func viewDidLoad() {
let pagesScrollViewSize = scrollView.frame.size
scrollView.contentSize = CGSize(width: pagesScrollViewSize.width * CGFloat(images.count), height: pagesScrollViewSize.height)
backgroundImageView.frame = CGRect(x: 0, y: 0, width: 2484, height: 736)
backgroundImageView.image = UIImage(named: "SF.png")
var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) as UIVisualEffectView
visualEffectView.frame = backgroundImageView.bounds
backgroundImageView.addSubview(visualEffectView)
view.addSubview(backgroundImageView)
view.sendSubviewToBack(backgroundImageView)
scrollView.backgroundColor = UIColor.clearColor()
}
func scrollViewDidScroll(scrollView: UIScrollView) {
loadVisiblePages()
var factor = scrollView.contentOffset.x / (scrollView.contentSize.width - 414);
if factor < 0 {
factor = 0
}
if factor > 1 {
factor = 1
}
var frame: CGRect = backgroundImageView.frame
frame.origin.x = factor * (414 - backgroundImageView.frame.size.width)
backgroundImageView.frame = frame
}
有人有什么建议吗?
您必须在 viewDidLoad
函数中添加以下内容:
self.view.clipsToBounds = true
或 scrollView.clipsToBounds = true
如果您只想剪辑 UIScrollView
中的子视图。
将此值设置为 true
会导致子视图被裁剪到接收器的边界。如果设置为 false,则其帧超出接收器可见边界的子视图不会被剪裁。默认值为 false
.