2014-11-03 23 views
-2

我想重寫removeFromSuperview爲我創建的自定義視圖。該視圖旨在包含一個UIActivityIndi​​catorView,並且我設法成功覆蓋initWithFrame方法來動畫它的外觀。現在我想重寫它的removeFromSuperview,在其中添加淡出動畫,以便從視圖控制器我可以簡單地調用[self.loadingView removeFromSuperview];不幸的是,加載視圖被刪除而沒有動畫,可能是因爲我需要在重寫時調用[super removeFromSuperview];。這裏是我使用的代碼,有沒有辦法解決它?覆蓋removeFromSuperview

-(void)removeFromSuperview 
{ 
[super removeFromSuperview]; 
[UIView animateWithDuration:0.5 
       animations:^{self.alpha = 0.0;} 
       completion:^(BOOL finished){[self removeFromSuperview];}]; 
} 
+1

'[自removeFromSuperview];'這會不會使一個無限循環??? – 2014-11-03 13:54:26

+0

不,我認爲一旦視圖被刪除,它不能自稱對嗎? – Diego 2014-11-03 14:27:57

回答

0

嘗試把[super removeFromSuperview]在完成塊爲動畫:

-(void)removeFromSuperview 
{ 
    [UIView animateWithDuration:0.5 
      animations:^{self.alpha = 0.0;} 
      completion:^(BOOL finished){[super removeFromSuperview];}]; 

}

+0

這是我的理解,當你重寫一個方法時,首先要做的就是調用'[super methodName]'。我錯了嗎?你的代碼完美的工作,我只是想知道,如果我讀取的重寫是錯誤的 – Diego 2014-11-03 14:26:18

+1

當你重寫一個方法時,通常情況下,你會在你的實現中調用'[super methodName]'* somewhere *。它不一定是第一行,也不一定要被調用。如果在執行原始實施之前你有什麼需要做的,你應該先做好自己的事情;在這種情況下,首先動畫,然後在動畫完成後調用原始實現。 – 2014-11-03 14:43:54