2012-12-15 221 views
2

我想讓我的UIViewviewDidLoad方法的右側滑入,這裏是我所得到的。UIView動畫幻燈片

CGRect menuFrame = self.menu.frame; 
menuFrame.origin.y = menuFrame.size.height+200; 

[UIView animateWithDuration:1 
         delay:0.05 
        options: UIViewAnimationCurveEaseIn 
       animations:^{ 
        self.menu.frame = menuFrame; 
       } 
       completion:^(BOOL finished){ 
        NSLog(@"Animation Complete!"); 

       }]; 

我不確定這裏出了什麼問題我非常感謝任何幫助。

回答

2

它看起來就像你正在試圖爲Y位置由200

最初下推到從底部滑動菜單通常你在其屏幕外的位置添加視圖作爲一個子視圖開始,然後設置屏幕上的位置在動畫塊中。

而且,請確保您通過1.0作爲動畫持續時間。

-2

利用這些transition.subtype不同的效果

CATransition* transition = [CATransition animation]; 
transition.duration = 0.5; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.subtype = kCATransitionFromLeft; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade 
//transition.subtype = kCATransitionFromTop; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom 

[appDelegate.navigation.view.layer addAnimation:transition forKey:nil]; 
viewController *DairyVC = [[viewController alloc] initWithNibName:@"viewController" bundle:nil]; 

[appDelegate.navigation pushViewController:DairyVC animated:YES]; 
5

這不是你問什麼,但它是值得一說反正:viewDidLoad是爲編碼糟糕的地方。調用viewDidLoad是因爲視圖控制器已獲取其視圖,而不是因爲該視圖已出現或即將出現在界面中。它可能很快出現在界面中,這就是爲什麼你的代碼似乎到目前爲止工作,但它可能不會。

此代碼的正確位置可能是viewWillAppearviewDidAppear。儘管第一次出現視圖,但您可能只想調用一次該代碼。如果您想防止代碼被調用,因爲您已在早期的viewDidAppear調用中將menu動畫到視圖中,只需包括一個條件檢查以查看menu在可見視圖中是否已經有一個框架。

順便說一句,另一個原因是避免具有viewDidLoad與框架和邊界做的事情是,如果你的應用程序啓動到景觀,這是你的根視圖,xy是相反的。

+0

乾杯兄弟,好點。 – user1432813