[英]Why does the UIScrollView could not be scrolled in the iOS simulator?
[英]using iOS 6.0 SDK and building for iOS 5 Target causes UIScrollView setMinimumZoomScale to fail when running on iOS 5 simulator
我升级到Xcode 4.5并开始使用iOS SDK 6.0:
我有一个使用Xcode 4.4和iOS SDK 5.1开发的通用应用程序
它已经在所有设备和模拟器上运行,没有任何故障。
为了让它继续在iPhone 5上运行,我想提供正确的启动图像并让它运行。
应用程序的许多部分在没有更改的情况下工作,但其中一部分没有更改:我放置在UIScrollView中的图像不会平移。 这一直在以前工作,但不是在iOS 6模拟器上。
但问题的真正症结在于:当我在iOS 5.0或iOS 5.1模拟器上运行时,在我的调试日志中,我看到抛出的异常如下:
-[NSKeyValueMethodSetter setMaximumNumberOfTouches:]: unrecognized selector sent to instance 0x6ddab20
堆栈爬网显示尝试进行此调用的代码是UIScrollView setMinimumZoomScale
。
我调用setMimimumZoomScale的代码如下:
CGFloat widthScale = self.scrollView.bounds.size.width / self.image.size.width;
CGFloat heightScale = self.scrollView.bounds.size.height / self.image.size.height;
// just reset the zoom scales; leave center and everything else where possible
self.scrollView.minimumZoomScale = MIN(1.0, MIN(widthScale, heightScale));
self.scrollView.maximumZoomScale = 4.0;
抛出的异常(和随后的崩溃)发生在第一次调用setMimimumZoomScale时,上面提到的消息。
我猜测Xcode 4.5正在使用setMinimumZoomScale的代码调用发送该消息,该消息可能存在于iOS 6的库中,但在iOS 5中从未发生过。
还有其他人看到类似的问题吗?
fwiw,我没有触及我的.storyboard文件,因此它们仍然可以在没有autoLayout的情况下工作。
我是否必须返回并在Xcode 4.5旁边安装Xcode 4.4才能继续允许维护我的工作应用程序?
回答我自己的问题......
我原来问题的复杂性涉及额外的手势识别器。
在iOS 5.1 SDK(以及之前的版本)中,可以向UIScrollView添加手势识别器,并且可以将其与内置于UIScrollView中的panGestureRecognizer和pinchGestureRecognizer结合使用。
在iOS 6.0 SDK下,显然不再支持此行为。 相关文档没有明确禁止行为,因为它确定了UIScrollView将对可能与平移和捏合相关的触摸做什么。
因为滚动视图没有滚动条,所以它必须知道触摸是否表示滚动意图与跟踪内容中的子视图的意图。 为了做出这种确定,它通过启动计时器暂时拦截触碰事件,并且在计时器触发之前,查看触摸手指是否进行任何移动。 如果计时器在没有显着位置变化的情况下触发,则滚动视图将跟踪事件发送到内容视图的触摸子视图。 如果用户在计时器过去之前将手指拖得足够远,则滚动视图会取消子视图中的任何跟踪并执行滚动操作。 子类可以覆盖touchesShouldBegin:withEvent:inContentView:,pagingEnabled和touchesShouldCancelInContentView:方法(由滚动视图调用),以影响滚动视图处理滚动手势的方式。
为了纠正这个问题,我必须确保故事板中的手势识别器不再是与scrollview相关联的集合的一部分,而是将它们与scrollview的内容视图相关联。
(在我的情况下,为了做到这一点,我不得不使用addGestureRecognizer:
手动添加它们addGestureRecognizer:
对于我感兴趣的每个手势识别器,因为内容视图是用于在故事板时间不知道的图像。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.