这是我的第一篇文章,所以如果我误解了这一点,我很抱歉。我很乐意澄清是否需要。
我有一个pageViewController,它呈现的每个viewController都包含一个scrollView,它显示来自应用程序内照片库的imageView(非常类似于在照片应用程序中放大照片,然后在图像集中轻扫)。我通过捏合手势实现放大和缩小,通常一切正常,但是,当我从一个图像滑动到下一个图像,然后回到原始图像,然后尝试向前或向后滑动时,视图会“卡住”。为了更好地说明这一点,请在图库中选择图像2。如果您滑动到图像3,然后向后滑动到图像2,向图像1滑动或图像3显示您想要到达的图像的条子,然后快照回到图像2。
快速缩小以稍微缩小图像并将其锁定回屏幕宽度,可以让您再次向前或向后自由缩放。我已经尝试在viewDidAppear中添加一些代码来快速缩小图像,然后让它快速回到屏幕的边界来模拟这个手势,但是正如预期的那样,每次在新图像上添加新图像时都可以看到调整。屏幕,我想滑动顺利。
任何有关解决此问题的方法的想法都将非常感激。我已经阅读了关于scrollViews和pageViews以及它们相关的委托和数据源的Apple文档,但是还没有找到这个问题的根源,尽管我可能只是忽略了一些东西。
如上所述,如果我能对手头的问题作出任何澄清,请告诉我。提前谢谢。
答案 0 :(得分:2)
我在同一个问题上挣扎了一段时间,并将其追踪到缩放,最终在缩放后将内容居中的错误。我的大多数帖子都在Swift(2.1)中,但是我的主要解决方案的链接是在Obj-C中。我有两个答案:
您可以在scrollView.bouncesZoom = false
(或等效的Obj-C)中设置viewDidLoad()
。这可以防止UIScrollView
缩放超过最小缩放比例,这样当图像处于最小缩放比例时,用户无法通过捏合来缩小图像。
然而,更优雅的解决方案来自https://stackoverflow.com/a/2887298/2490299。最初,我的centerScrollViewContents()
(链接答案中为scrollViewDidZoom()
)是:
func centerScrollViewContents() {
let boundsSize = scrollView.bounds.size
var contentsFrame = imageView.frame
if contentsFrame.size.width < boundsSize.width {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.width) / 2.0
} else {
contentsFrame.origin.x = 0.0
}
if contentsFrame.size.height < boundsSize.height {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.height) / 2.0
} else {
contentsFrame.origin.y = 0.0
}
imageView.frame = contentsFrame
}
通过改变框架显然使内容居中导致了这个问题。作为参考,Swift等同于上面链接的答案:
func scrollViewDidZoom(scrollView: UIScrollView) {
let offsetX = max((scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5, 0.0)
let offsetY = max((scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5, 0.0)
imageView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX,
scrollView.contentSize.height * 0.5 + offsetY)
}
希望如果你碰巧遇到同样的问题,这可以帮到你;听起来非常相似。