如何在UIScrollView的滚动指示器下方放置非滚动UIView



我有一个应用程序,我正在使用缩放滚动视图将图像裁剪为具有固定纵横比的矩形。我有一个遮罩,可以使图像中要裁剪的部分变暗。目前,我将这个子视图添加到UIScrollView的父视图中,使它们成为兄弟,其中这个掩码比滚动视图"高"。看起来很棒。除了

这个掩码也屏蔽了scrollIndicators,因此看起来有点愚蠢。我可以关闭滚动指示符,或者,理想情况下,我想把这个UIView放在滚动指示符下面,但不与其他内容一起滚动,如果我通过[scrollview addSubview:myMySmaskView]将其作为滚动视图的子视图,就会发生这种情况;

有人知道这是否可能吗?

首先,将UIScrollView子类化,这样您就可以修改滚动视图的默认行为。

其次,用您的图像创建一个图像视图,并将图像视图和遮罩视图都放在滚动视图中,这样您的视图将位于滚动指示器下方。

第三,在您的滚动视图委托方法viewForZoomingInScrollView:中,返回您的图像视图,以便只有图像视图进行缩放。请注意,滚动视图会将内容大小调整为返回视图的大小,但只要图像视图占据整个内容大小,就可以了。

最后,覆盖layoutSubviews方法,将遮罩视图移动到滚动视图的可见边界。layoutSubviews方法据说在滚动的每一帧都会被调用,所以最终用户不会看到位置的变化。

有关更多详细信息,您可以参考WWDC会话视频"高级滚动查看技术"。

编辑:好的,刚刚发现可以通过实现委托方法scrollViewDidSolloll来避免覆盖layoutSubviews。

最新更新