2012-12-15 176 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