旋转 ipad 屏幕时同时调用滚动功能

Posted

技术标签:

【中文标题】旋转 ipad 屏幕时同时调用滚动功能【英文标题】:Scrolling function called simultaneously while rotating the ipad screen 【发布时间】:2012-05-10 18:09:19 【问题描述】:

我正在创建一个包含 8 页的 UIscroll 视图。每个页面都是另一个视图控制器类,具有添加到此滚动视图的一些功能。

在加载应用程序时,当我将屏幕从一页滚动到另一页时,应用程序运行良好。 但是当我将 ipad 旋转到不同的界面方向时,会调用 UIScrollView 委托方法 - ScrollViewDidScroll,并且当前屏幕(页面)会滚动到上一个屏幕。调试让我认为滚动功能是与设备旋转同时调用的。

如何停止/防止在旋转时调用“ScrollViewDidScroll”委托方法,以便仅执行旋转功能(即不应将屏幕移至上一个)?

我尝试了提供的不同解决方案,但几乎没有帮助

我是 xcode 开发的新手。

【问题讨论】:

@JacquesCousteau 谢谢,我会注意的。 @zombie007 你有什么解决办法吗?我面临同样的问题.. @neeraj 经过大量探索以找到(体面的)解决方案后,我想出了一个解决方法——我创建了一个全局变量来维护页码。当滚动方法完成执行(旋转后)时,我设置了滚动视图偏移量 w.r.t 所需页面的偏移量。这个页码是从我的全局变量中获得的。 @zombie007 其实我找到了更好的解决方案。在setContentOffset:方法中,ios其实是在改变scrollView的bounds属性的来源。所以我刚刚为 UIScrollView 添加了一个类别,其中一个名为 customSetContentOffset: 的方法会将 scrollView.bounds 的原点设置为所需的内容偏移量。这不会进行任何回调,当然还会更改内容偏移量。 @neeraj 您的解决方案听起来不错,虽然我自己没有尝试过。这是您解决问题的方法吗 P.S:请原谅我迟到的回复,因为我不是该网站的常客。 【参考方案1】:

除了使用scrollViewDidScroll方法来设置当前页面,你可以使用scrollViewDidEndDecelerating方法,它不会在轮播时调用。

这样,您只需在旋转后根据当前页面设置正确的contentOffset

【讨论】:

事实上,我实际上是在 ScrollViewDidEndDecelerating 方法本身中设置我的全局变量。所以它奏效了。无论如何谢谢:)

以上是关于旋转 ipad 屏幕时同时调用滚动功能的主要内容,如果未能解决你的问题,请参考以下文章

如何使用我的 ios 应用程序中的代码旋转 ipad 屏幕

在 Universal Xcode 6 项目中仅停止 iPhone 屏幕旋转

在 iPad Web App 上拖放 - 同时保留滚动功能

使用 javascript 检测 iPad 设备方向

iOS 11开发教程iOS11模拟器介绍一

滑轨电视功能与特点