UIView动画幻灯片

时间:2012-12-15 11:10:58

标签: ios xcode animation uiview cgrect

我试图让我的UIViewviewDidLoad方法右侧滑入,这就是我所拥有的。

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!");

                 }];

我不确定这里出了什么问题我非常感谢你的帮助。

3 个答案:

答案 0 :(得分:5)

这不是你提出的问题,但无论如何都值得说:viewDidLoad对于这段代码来说是一个不好的地方。调用viewDidLoad是因为视图控制器已获取其视图,而不是因为该视图已出现或将很快出现在界面中。 可能很快会出现在界面中,这就是为什么你的代码到目前为止似乎已经工作的原因,但它可能不会。

此代码的正确位置可能是viewWillAppearviewDidAppear。但是,第一次出现视图时,您可能只想调用此代码一次。如果您想阻止调用代码,因为您已经在之前的menu调用中对viewDidAppear进行了动画处理,只需添加条件检查以查看menu是否已有可见视图中的框架。

顺便说一下,避免与viewDidLoad中的边框和边界有关的另一个原因是,如果您的应用启动到横向,这是您的根视图,x和{{1}反转了。

答案 1 :(得分:2)

看起来您正试图从底部滑入菜单,因为Y位置最初被按下200。

通常,您首先将视图作为子视图添加到其屏幕外位置,然后在动画块中设置屏幕位置。

并且,请确保将1.0作为动画持续时间传递。

答案 2 :(得分:-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];