UIScrollView旋轉時函數(shù)調(diào)用次序

近期項目中需實現(xiàn)分頁的ScrollView旋轉功能,但是遇到一個相當奇怪的問題:當scrollView處于最后一頁時,旋轉后的contentOffset值會異常,即旋轉后scrollView可能不在最后一頁。通過查找StackOverFlow和試驗,最終發(fā)現(xiàn):當scrollView處于最后一頁時,旋轉時調(diào)用的函數(shù)是不同的。

正常情況下(非最后一頁),函數(shù)調(diào)用順序如下:

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

最后一頁時,函數(shù)調(diào)用順序如下:

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

UIScrollView在旋轉時,會通過UIViewAutosizingMask的規(guī)范自動調(diào)整bounds的大小,這個bounds的變化在willAnimateRotationToInterfaceOrientation: duration:可以捕捉到,但是當UIScrollView處于最后一頁時,系統(tǒng)在我們捕捉到scrollView尺寸變化之前調(diào)用了scrollViewDidScroll函數(shù),恰巧我們經(jīng)常性的在此函數(shù)中做翻頁處理,從而導致了頁面顯示的不準確。

解決辦法:在willRotateToInterfaceOrientation: duration:中強制將UIScrollView的scrollEnabled屬性置為NO,然后在didRotateFromInterfaceOrientation:再次將scrollEnabled屬性置為YES。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容