Ios (Objective-C)在来回分页时,pageView中的viewController会“卡住”
这是我的第一篇帖子,如果我说的有误,我深表歉意。如果需要,我很乐意澄清 我有一个pageViewController,它显示的每个viewController都包含一个scrollView,其中显示应用程序内照片库中的图像视图,非常类似于在照片应用程序中放大照片,然后在图像集合中滑动。我已经通过收缩手势实现了放大和缩小,通常一切都正常,但是,当我从一个图像滑动到下一个图像,然后返回到原始图像,然后尝试向前或向后滑动时,视图会被卡住。为了更好地说明这一点,假设您在gallery中选择了image 2。如果滑动到图像3,然后再滑动回图像2,则向图像1或图像3滑动时,将显示您试图获取的图像的一小部分,然后再捕捉回图像2 快速缩小图像并将其锁定回屏幕宽度,可让您再次自由地向前或向后缩放。我曾尝试在ViewDidAppeal中添加一些代码,以快速缩小图像,然后让其捕捉到屏幕边界以模拟此手势,但正如预期的那样,每次在屏幕上放置新图像时,您都可以看到调整,我希望滑动平滑 任何关于解决这一问题的想法都将不胜感激。我已经阅读了苹果关于scrollViews和pageViews以及它们相关的委托和数据源的文档,但是没有找到这个问题的根源,尽管我可能只是忽略了一些东西Ios (Objective-C)在来回分页时,pageView中的viewController会“卡住”,ios,objective-c,iphone,uiscrollview,uipageviewcontroller,Ios,Objective C,Iphone,Uiscrollview,Uipageviewcontroller,这是我的第一篇帖子,如果我说的有误,我深表歉意。如果需要,我很乐意澄清 我有一个pageViewController,它显示的每个viewController都包含一个scrollView,其中显示应用程序内照片库中的图像视图,非常类似于在照片应用程序中放大照片,然后在图像集合中滑动。我已经通过收缩手势实现了放大和缩小,通常一切都正常,但是,当我从一个图像滑动到下一个图像,然后返回到原始图像,然后尝试向前或向后滑动时,视图会被卡住。为了更好地说明这一点,假设您在gallery中选择了image
如上所述,请让我知道,如果我可以提供任何澄清的问题在手。提前感谢。我曾为同一问题挣扎过一段时间,并一直追踪到缩放,最终在缩放后内容居中出现错误。我的大部分帖子都在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)
}