2012-10-17 43 views
10

我有一個視圖控制器與一羣我需要發送到前和動畫的視圖的中心的UIImageViews的。的iOS bringSubviewToFront阻斷的UIView動畫

我試圖在投射UIView動畫之前調用bringSubviewToFront,看起來發生的是視圖發送到棧頂,但動畫不會發生(即使完成處理程序日誌顯示爲if動畫DID發生)。

我第二次按觸發動畫的按鈕(考慮到這一次的觀點已經在頂部指數,動畫發生,因爲它應該)

繼承人我的代碼:

- (void)beginAnimationWithSelectedCountry:(UIView *)countryView 
{ 
    if (!countryView) return; 

    [self.view bringSubviewToFront:countryView]; 
    [UIView animateWithDuration:0.6f delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
     countryView.center = CGPointMake(self.view.center.x, self.view.center.y); 
    } completion:^(BOOL finished) { 
     NSLog(@"Animation complete"); 
    }]; 
} 

有什麼想法?我已經在這個幾個小時了>。 <

感謝

編輯: 如果我註釋掉bringSubviewToFront代碼與動畫完美地執行(除了認爲是在一些其他的看法),所以我敢肯定preety問題是與線:

[self.view bringSubviewToFront:countryView]; 

下面有什麼,我現在有一個截圖可以闡明這個問題一些光: http://d.pr/i/PKoa

+0

我將開始與如─return語句還有,看看你的方法,甚至被稱爲與NSLog的首次周圍。 – CodaFi

+0

已經選中,因爲我發佈了「動畫完整」日誌被稱爲兩次。謝謝您的好意 –

+1

做到這一點 - 把動畫稱爲animateCountry第二種方法把動畫代碼在裏面 - 在開始的方法調用bringSubViewToFront - 然後調用[自我performSelector:animateCountry ...它會工作。 –

回答

0

嘗試增加UIViewAnimationOptionAllowAnimatedContent的選項。我幾乎可以肯定,這是這種選擇的一種情況,但如果不是,請與其他選項一起玩。你也可以嘗試安排一個模塊在下一個runloop上執行你的動畫,這是我發現的帶有動畫的祝福。

3

當你調用

[self.view bringSubviewToFront:countryView]; 

你觸發一個新的視圖佈局事件。您可以通過在控制器的'viewDidLayoutSubviews'中設置一個斷點來檢查。

我有一個類似的問題:在「viewDidLayoutSubviews」的方法我自己的代碼通過重置我試圖動畫對象的幀取消了我的動畫。

+2

嗨巴里,謝謝你讓我們知道是什麼導致它失敗。無論如何,你是否知道解決這個問題? –

6

電話:

[self.view layoutSubviews];

右後:

[self.view bringSubviewToFront:countryView];

這將解決您的問題。