2013-02-03 82 views
1

我想使用塊動畫翻轉UIImageView。許多網站(以及SO上的答案)暗示了這一點:使用塊翻轉UIImageView

flipTile.image = frontImage; 

[UIView transitionWithView: flipTile 
        duration: 2.5f 
        options: UIViewAnimationOptionTransitionFlipFromLeft 
       animations:^(void) { 
        flipTile.image = backImage; 
       } 
       completion:^(BOOL finished) { 
       } 
]; 

不幸的是,這並沒有給我預期的結果。對於動畫的前半部分,我一無所獲,然後後面的圖像翻轉到動畫後半部分的外觀。這就像frontImage是隱藏的或透明的 - 事實並非如此。

過渡中的某些事情正在搞亂事情。我究竟做錯了什麼?

+0

感謝羅布。實際上,我在完成時做了一些事情,但爲了簡單起見,在發佈代碼之前我已將其刪除。它們與正在顯示的代碼無關。 – Axeva

回答

3

這裏的解決方案,應該任何人面對這樣的問題,在未來:

簡而言之,動畫塊我UIImageView的當前狀態之間翻轉,並且狀態我在animations部分設置。但是,在調用動畫塊之前設置了flipTile的圖像時,iOS渲染引擎在動畫開始之前沒有機會更新我的UIImageView。因此,我看到從當前狀態UIImageViewnil)到新狀態(backImage)的動畫。

爲了解決這個問題,我需要將控制權重新返回到iOS,以便讓渲染引擎完成業務,然後執行動畫。

我是這樣做的:

- (void)giveHint { 
    /* 
     other work here 
    */ 

    flipTile.image = currentTileImage; 

    [self performSelector:@selector(flipTile) withObject:nil afterDelay: 0.1]; 
} 

- (void)flipTile { 
    [UIView transitionWithView: flipTile 
         duration: 0.5 
         options: UIViewAnimationOptionTransitionFlipFromLeft 
        animations:^{ 
         flipTile.image = newTileImage; 
        } 
        completion:^(BOOL finished) { 
         /* 
          clean up 
         */ 
        } 
    ]; 
} 
1

這正是transitionWithView的設計目的。

您描述的行爲是frontImage的症狀是nil(或者,正如您所指出的,尚未初始化)。如果尚未使用有效圖像初始化並且執行了動畫,則動畫的前半部分沒有任何內容,只能看到動畫的後半部分。

如果frontImage不應該是nil,我會檢查(NSAssertNSLog)。如果frontImage可以爲nil,那麼,如果nil將初始圖像設置爲單獨的空白圖像,則可以從該空白圖像開始動畫顯示完整的翻動。