2012-11-12 82 views
1

我有一個水平滾動分頁UIScrollView在iPad應用程序中,包含大量的頁面。在最後一頁,我上的按鈕點擊屏幕以重置回第1頁。我希望能夠在跨解散這一轉變,但它似乎並沒有工作:如何交叉淡入淡出UIScrollView回到開頭

[UIView transitionWithView:self.view duration:1.0 options:UIViewAnimationOptionTransitionCrossDissolve|UIViewAnimationOptionAllowAnimatedContent animations:^{ 
    pagingScrollView.contentOffset = CGPointZero; 
} completion:^(BOOL finished) { 
    [self refreshPages]; 
}]; 

我讀到添加UIViewAnimationOptionAllowAnimatedContent將允許所有內容轉換,但它不起作用。相反,屏幕交叉溶解爲背景顏色,當轉換完成後,第一頁就會出現。

+1

我不認爲這裏需要AllowAnimatedContent,因爲你不需要在轉換過程中出現基於屬性的動畫。順便說一下,您還可以嘗試使用setContentOffset設置內容偏移量:animated:顯式禁用滾動動畫。 – amadour

回答

6

你不能淡出一個UIView(滾輪),同時淡入同樣的觀點...你可以只使用不同的UIViews

...

你可以做的是:

1)淡出中的當前位置的滾動條(於背景)

2),而滾輪是不可見的,它移動到正確的位置(沒有動畫)

3)淡入從背景

類似的卷軸:

// START FIRST PART OF ANIMATION 
[UIView animateWithDuration:0.5 delay:0.0 options: options:UIViewAnimationOptionTransitionCrossDissolve|UIViewAnimationOptionAllowAnimatedContent animations:^{ 
    pagingScrollView.alpha = 0; 


} completion:^(BOOL finished) { 

// FIRST PART ENDED 
// MOVE SCROLLER (no animation) 
    pagingScrollView.contentOffset = CGPointZero; 

// START SECOND PART OF ANIMATION 
[UIView animateWithDuration:0.5 delay:0.0 options: options:UIViewAnimationOptionTransitionCrossDissolve|UIViewAnimationOptionAllowAnimatedContent animations:^{ 
// fadeIn - animated 
    pagingScrollView.alpha = 1; 
} completion:^(BOOL finished) { 

// ANIMATION ENDED 
    [self refreshPages]; 
}]; 



}]; 

新的編輯:

感謝amadour,誰教我用他的意見的東西,

我希望他可以自己添加一個答案,我會投他的票

無論如何,要一個swer到jowie原題:

我得到了正確的動畫只是移動contentOffset設置了動畫塊, 和消除UIViewAnimationOptionAllowAnimatedContent(不是真的需要),並通過pagingScrollView作爲參數transitionWithView

爲此工作我:

pagingScrollView.contentOffset = CGPointZero; 
    [UIView transitionWithView:pagingScrollView duration:3.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
//  pagingScrollView.contentOffset = CGPointZero; // move up, outside of animation block 
    } completion:^(BOOL finished) { 
     NSLog(@"-->> END amimation"); 
     [self refreshPages]; 
    }]; 
+0

這是一個相當優雅的解決方案,謝謝。你確定無法淡化單一視圖嗎?我認爲它的工作如果你動畫視圖的框架......它不使用屏幕外渲染緩衝區? – jowie

+0

關閉屏幕渲染緩衝區用於「凍結」當前屏幕,因此渲染動畫中間幀的速度會更快,但它不會渲染動畫之前的最終幀,據我所知;一般來說,對於這些類型的動畫,您可以設置視圖的起始屬性,然後設置該屬性的最終值,然後啓動動畫,通過動畫可以看到所有中間值幀;但你要做的是將fadeIn(即將alpha值從0更改爲1)和fadeOut(即將相同屬性alpha值從1更改爲0)用於相同視圖! – meronix

+0

...當然你可以自己凍結(=捕獲屏幕圖像)初始屏幕,將其保存在圖像中,在屏幕上顯示在滾動視圖上,將滾動視圖移動到最終位置。在這一點上,你可以爲捕獲的圖像的fadeOut設置動畫效果,這樣你就可以得到你想要的效果...在stackoverflow中搜索,有一些例子可以讓屏幕截圖... – meronix