UIScrollView旋转时函数调用次序

2014-05-24  本文已影响0人  EDSIOON

近期项目中需实现分页的ScrollView旋转功能,但是遇到一个相当奇怪的问题:当scrollView处于最后一页时,旋转后的contentOffset值会异常,即旋转后scrollView可能不在最后一页。通过查找StackOverFlow和试验,最终发现:当scrollView处于最后一页时,旋转时调用的函数是不同的。

正常情况下(非最后一页),函数调用顺序如下:

  1. willRotateToInterfaceOrientation:duration:
  2. willAnimateRotationToInterfaceOrientation: duration:
  3. didRotateFromInterfaceOrientation:

最后一页时,函数调用顺序如下:

  1. willRotateToInterfaceOrientation: duration:
  2. scrollViewDidScroll:
  3. willAnimateRotationToInterfaceOrientation: duration:
  4. didRotateFromInterfaceOrientation:

UIScrollView在旋转时,会通过UIViewAutosizingMask的规范自动调整bounds的大小,这个bounds的变化在willAnimateRotationToInterfaceOrientation: duration:可以捕捉到,但是当UIScrollView处于最后一页时,系统在我们捕捉到scrollView尺寸变化之前调用了scrollViewDidScroll函数,恰巧我们经常性的在此函数中做翻页处理,从而导致了页面显示的不准确。

解决办法:在willRotateToInterfaceOrientation: duration:中强制将UIScrollView的scrollEnabled属性置为NO,然后在didRotateFromInterfaceOrientation:再次将scrollEnabled属性置为YES。

上一篇下一篇

猜你喜欢

热点阅读