2

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

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

                 }];

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

4

3 回答 3

5

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

此代码的正确位置可能是viewWillAppearviewDidAppear。不过,您可能只想在视图第一次出现时调用此代码一次。如果您想阻止代码被调用,因为您已经menu在之前的调用中动画化到视图中viewDidAppear,只需包含一个条件检查以查看可见视图中是否menu已经有一个框架。

顺便说一句,避免与框架和边界有关的事情的另一个原因viewDidLoad是,如果您的应用程序启动到横向并且这是您的根视图,x并且y是相反的。

于 2012-12-15T16:28:21.643 回答
2

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

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

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

于 2012-12-15T11:30:21.363 回答
-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];
于 2012-12-15T11:31:31.727 回答