2012-05-18 38 views
4

我有一些動畫會在加載根視圖控制器時自動啓動。這些動畫包含在viewDidLoad中。當我導航到我的下一個視圖控制器並返回到根視圖控制器時,所有動畫都停止了。當我按「home」按鈕然後返回到視圖時,會發生相同的行爲。動畫在視圖控制器之間移動時不會重新啓動

我確定我在這裏錯過了一些非常基本的東西,但會很感激任何幫助。謝謝。

編輯1

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [self beeBobbing]; 
    //animate the butterfly oscillating 
    [self butterflyOscillate]; 

} 

-(void) beeBobbing 
{ 
    [UIView animateWithDuration:1.0f delay:0 options:(UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionAllowUserInteraction) animations:^{ 
     CGPoint bottomPoint = CGPointMake(215.0, 380.0); 
     imgBee.center = bottomPoint; 
    } completion:^(BOOL finished) { 

    }]; 

} 

編輯2:這種類型的動畫似乎視圖之間切換時重新啓動:

-(void) animateClouds 
{ 
    [UIView animateWithDuration:30.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ 
     CGPoint leftScreenCenter = CGPointMake(-420.0, 119.0); 
     imgClouds.center = leftScreenCenter; 
    } completion:^(BOOL finished) { 
     CGPoint rightScreenCenter = CGPointMake(1450.0, 119.0); 
     imgClouds.center = rightScreenCenter; 
     [UIView animateWithDuration:40.0f delay:0 options: (UIViewAnimationOptionCurveLinear | UIViewAnimationOptionRepeat) animations:^{ 
      CGPoint leftScreenCenter = CGPointMake(-420.0, 119.0); 
      imgClouds.center = leftScreenCenter; 
     } completion:^(BOOL finished) { 

     }]; 

    }]; 

} 
+0

你正在做什麼類型的動畫(動畫核心,UIView的animation.opengl等)以及什麼事件? –

+0

道歉,我會更新OP – garethdn

+0

你必須在viewDiDA中做同樣的動作,因爲itgets在切換views.call [self beeBobbing]; in viewDidAppear –

回答

3

viewDidLoad中就被稱爲當你第一次加載控制器第一次,如果你然後導航到其他viewControllers推一下或你改變標籤,你不通過viewDidLoad ...

嘗試啓動動畫的方法 - (無效)viewWillAppear中:(BOOL)動畫

+0

我已將我的動畫方法放在'viewWillAppear'中,但並不是所有這些方法在視圖之間導航時都可以工作。上面的帖子中的「beeBobbing」動畫不起作用。 – garethdn

+0

你可以嘗試在viewDidAppear中使用它嗎? – meronix

+0

這給出了相同的結果,但是在第一次動畫開始之前有一個很大的延遲 – garethdn

2

您需要添加動畫在viewWillAppear:viewDidLoad在控制器初始化並且視圖從nib加載或在-loadView方法中創建(如果被覆蓋)時被調用一次,並且在控制器被銷燬並再次創建之前不會被再次調用。當您前後導航時觸發的方法是viewWillAppear:viewDidAppearviewWillDisappear:

+0

我已經將我的動畫方法放在'viewWillAppear'中,但是在瀏覽視圖之間似乎並不是所有的動畫方法都能工作。上面的帖子中的「beeBobbing」動畫不起作用。 – garethdn

+0

viewWillAppear:在顯示視圖之前觸發,因此動畫可能會在視圖變爲可見之前完成。嘗試在動畫上放一些延遲,或將其放在viewDidAppear中...您必須制定出最佳時機... – graver

+0

我正在使用的動畫是循環的,因此它們在出現之前沒有完成。另外,當我把動畫放在'viewDidAppear'中時,我得到了相同的行爲。 – garethdn

6

我認爲,如果你給所有動畫viewWillAppear:那麼它的做工精細... 完蛋了...... :)

0

我注意到的是,你需要設置你想要的視圖位置動畫在viewDidAppearviewWillAppear

imgClouds.frame = set frame here and this is most important 
[self beeBobbing];