2010-05-12 84 views
1

我正在開發圖像查看器,很像照片應用程序。如何正確處理包含UIImageViews的UIScrollView的旋轉?

這是一個UIScrollView,啓用了從互聯網上加載圖像的分頁功能,所以我調整了部分LazyTableImages sample。滾動視圖和其中的每個ImageView都具有設置的所有自動調整大小掩碼標誌。

當我第一次觀察旋轉過程中如何調整大小時,它看起來不錯,但是一旦我開始嘗試與滾動視圖進行交互,我意識到我還必須以編程方式更改contentView的大小。我通過實現didRotateFromInterfaceOrientation做到了這一點:在我的視圖控制器中。

[self.scrollView setContentSize:CGSizeMake(numberOfImages * portraitWidth, [scrollView bounds].size.height)]; 

隨着相互作用行爲正常,然後我發現,如果我觀看第二照片並旋轉時,第一和第二照片兩者的部分將被顯示在屏幕上。我還需要更改contentOffset。

我試圖解決這兩種方法 - 通過使用UIScrollView的scrollRectToVisible:animated:方法,以及試圖直接設置contentOffset屬性。我已經嘗試將這些代碼放在方向變化的「一步」和「兩步」響應實現中。例如:

-(void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
[self.scrollView setContentOffset:CGPointMake(currentlyViewedPhotoIndex * largeImageHeight,0) animated:YES]; 

在所有情況下,它只是看起來像死一般。要麼我清楚地看到滾動發生,要麼只是跳躍。 Uuuuuuuuuuugly!有沒有辦法做到這一點,使其行爲完全像照片應用程序呢?

回答

4

我最終做了什麼 - 在旋轉開始之前,隱藏UIScrollView並創建一個包含當前查看圖像的UIImageView。旋轉時,該圖像將旋轉得非常漂亮,當旋轉完成時,移除ImageView並取消隱藏滾動視圖。

更新 - 如果您今天正在閱讀(iOS 6以後的任何時間),請使用UIPageViewController並將transitionStyle設置爲UIPageViewControllerTransitionStyleScroll,以獲取crissakes。

1

當面對相同的問題時,我做了一些稍微不同的事情。在willRotateToInterfaceOrientation:duration:中,我隱藏除當前顯示的子視圖之外的所有UIScrollView子視圖,並在didRotateFromInterfaceOrientation:中取消隱藏子視圖。