簡體   English   中英

UIScrollView中的動畫

[英]Animation inside a UIScrollView

我希望淡出視圖,因為它在父UIScrollview中滾動。 淡出動畫開始時,滾動視圖停止滾動。 當淡入淡出完成時,它會跳轉到正確的位置。

我的淡出是通過animateWithDuration和塊對象實現的,在scrollViewWillBeginDragging中檢測到頁面更改時觸發。

有誰知道如何使它們同時發生? 為了清楚起見,我沒有“動畫化”UIScrollView滾動 - 而是通過用戶交互滑動來實現。

編輯:

這是我用來淡化UIView的代碼。 此代碼位於UIViewController派生類中,該類是UIScrollView的委托。 當用戶開始拖動他的手指時,我想淡出subView。 但是當用戶開始拖動手指時,子視圖會淡化並且滾動停止。 在subView完全淡出后,滾動視圖將捕捉到用戶手指所在的位置。

-(void)scrollViewWillBeginDragging:(UIScrollView*)scrollView
{
    [UIView animateWithDuration:0.5
        animations:^
        {
            self.subView.alpha = 0.0f;
        }
        completion:^(BOOL finished) { }];
}

有點晚了,但是如果你想繼續使用塊,你可以使用:

animateWithDuration:延遲:選項:動畫:完成:

將“UIViewAnimationOptionAllowUserInteraction”添加到選項以允許滾動時進行交互。

我相信你仍然會遇到滯后問題。 這是我能解釋的最佳方式。 因為我可能使用錯誤的條款,請提前原諒我。 所有動畫都必須在主線程上運行。 當您調用動畫時,iOS首先* P * rocesses然后它* R *在生成* F * rames之前進行。 看起來像這樣。

PPPPRRRRFFFFFFFFFFFFFFFFFF

但是由於ScrollViews不知道你的動畫將會持續多長時間或者什么時候結束,它必須像這樣執行動畫。

PRFPRFPRFPRFPRFPRFPRFPRF

我的理論是你遇到的延遲與這兩個調用同時在主線程上發生沖突有關。 除了使用更快的芯片,我不確定如何解決這個問題。 我認為你可以將一個動畫推送到CPU,一個推動到GPU,但我還沒有那么先進的編程。

非常有趣......我已經檢查了這個,是的,我有同樣的效果......好吧,似乎animateWithDuration以某種方式阻止了主線程......這是不合邏輯的,文檔沒有說關於它的任何事情..但是有一個簡單的解決方法,類似於這個:(我已經將動畫持續時間設置為3,所以我可以看到它正在工作,而我正在移動我的滾動視圖:) ...)

[UIView beginAnimations:@"FadeAnimations" context:nil];
[UIView setAnimationDuration:3]; 

self.subview.alpha = 0.0f;

[UIView commitAnimations];

我建議,因為不透明度是基於用戶手指在UIScrollView中的移動,使用委托方法scrollViewDidScroll:。 作為參數傳遞的scrollView可用於檢查contentOffset,它只是一個CGPoint,指示用戶滾動的UIScrollView的內容視圖有多遠。 這樣的東西可用於將滾動位置與分頁UIScrollView中給定視圖的不透明度相關聯:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  // The case where I used this, the x-coordinate was relevant. You may be concerned with the y-coordinate--I'm not sure
  CGFloat percent = ((int)(scrollView.contentOffset.x) % (int)(scrollView.frame.size.width)) / scrollView.frame.size.width;
  if (percent > 0.0 && percent < 1.0) { // Of course, you can specify your own range of alpha values
    relevantView.alpha = percent; // You could also create a mathematical function that maps contentOffset to opacity in a different way than this
  }
}

根據仍然不應該被廣泛發布的信息,所有iOS 4.x版本在動畫進行過程中完全阻止用戶交互。

不過有趣的是,你是UITouches顯然仍然在動畫中注冊? 嗯...也許這表明還有一些新東西正在發布尚未發布的版本!

即,如果可以,請閱讀有關UIView類方法的iOS 5 Beta文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM