美文网首页
UIScrollView旋转时函数调用次序

UIScrollView旋转时函数调用次序

作者: EDSIOON | 来源:发表于2014-05-24 12:54 被阅读0次

    近期项目中需实现分页的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。

    相关文章

      网友评论

          本文标题:UIScrollView旋转时函数调用次序

          本文链接:https://www.haomeiwen.com/subject/rxddtttx.html