Ios (Objective-C)在来回分页时,pageView中的viewController会“卡住”

Ios (Objective-C)在来回分页时,pageView中的viewController会“卡住”,ios,objective-c,iphone,uiscrollview,uipageviewcontroller,Ios,Objective C,Iphone,Uiscrollview,Uipageviewcontroller,这是我的第一篇帖子,如果我说的有误,我深表歉意。如果需要,我很乐意澄清 我有一个pageViewController,它显示的每个viewController都包含一个scrollView,其中显示应用程序内照片库中的图像视图,非常类似于在照片应用程序中放大照片,然后在图像集合中滑动。我已经通过收缩手势实现了放大和缩小,通常一切都正常,但是,当我从一个图像滑动到下一个图像,然后返回到原始图像,然后尝试向前或向后滑动时,视图会被卡住。为了更好地说明这一点,假设您在gallery中选择了image

这是我的第一篇帖子,如果我说的有误,我深表歉意。如果需要,我很乐意澄清

我有一个pageViewController,它显示的每个viewController都包含一个scrollView,其中显示应用程序内照片库中的图像视图,非常类似于在照片应用程序中放大照片,然后在图像集合中滑动。我已经通过收缩手势实现了放大和缩小,通常一切都正常,但是,当我从一个图像滑动到下一个图像,然后返回到原始图像,然后尝试向前或向后滑动时,视图会被卡住。为了更好地说明这一点,假设您在gallery中选择了image 2。如果滑动到图像3,然后再滑动回图像2,则向图像1或图像3滑动时,将显示您试图获取的图像的一小部分,然后再捕捉回图像2

快速缩小图像并将其锁定回屏幕宽度,可让您再次自由地向前或向后缩放。我曾尝试在ViewDidAppeal中添加一些代码,以快速缩小图像,然后让其捕捉到屏幕边界以模拟此手势,但正如预期的那样,每次在屏幕上放置新图像时,您都可以看到调整,我希望滑动平滑

任何关于解决这一问题的想法都将不胜感激。我已经阅读了苹果关于scrollViews和pageViews以及它们相关的委托和数据源的文档,但是没有找到这个问题的根源,尽管我可能只是忽略了一些东西


如上所述,请让我知道,如果我可以提供任何澄清的问题在手。提前感谢。

我曾为同一问题挣扎过一段时间,并一直追踪到缩放,最终在缩放后内容居中出现错误。我的大部分帖子都在Swift 2.1中,但我的主要解决方案的链接在Obj-C中。我有两个答案:

您可以在viewDidLoad或等效Obj-C中设置scrollView.bouncesZoom=false。这会阻止UIScrollView缩放超过最小缩放比例,因此当图像处于最小缩放比例时,用户无法通过挤压使图像变小

然而,更优雅的解决方案来自。最初,我的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
}

如果你碰巧遇到和我一样的问题,希望这能帮到你;听起来很相似。

谢谢您的详细回复,我忘了我在这里发布了这个问题。我几个月前解决了这个问题,我的解决方案与你的类似。当我有机会的时候,我会挖掘代码并编辑我的问题来展示我的方法。再次感谢你的回答。
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)
}