UIView 动画滑入
Posted
技术标签:
【中文标题】UIView 动画滑入【英文标题】:UIView Animation slide in 【发布时间】:2012-12-15 11:10:57 【问题描述】:我正在尝试让我的 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!");
];
我不确定这里出了什么问题,非常感谢任何帮助。
【问题讨论】:
【参考方案1】:这不是你问的,但无论如何还是值得一说:viewDidLoad
是这段代码的坏地方。调用viewDidLoad
是因为视图控制器已经获得了它的视图,而不是因为该视图已经出现或即将出现在界面中。它可能很快就会出现在界面中,这就是为什么您的代码到目前为止似乎可以正常工作,但可能不会。
此代码的正确位置可能是viewWillAppear
或viewDidAppear
。不过,您可能只想在视图第一次出现时调用此代码一次。如果您想阻止代码被调用,因为您已经在之前的viewDidAppear
调用中将menu
动画化到视图中,只需包含一个条件检查以查看menu
是否在可见视图中已经有一个框架。
顺便说一句,在viewDidLoad
中避免与框架和边界有关的另一个原因是,如果您的应用启动到横向并且这是您的根视图,则x
和y
会颠倒。
【讨论】:
【参考方案2】:看起来您正试图从底部滑入菜单,因为 Y 位置最初被向下推了 200。
通常您首先将视图作为子视图添加到其屏幕外位置,然后在动画块中设置屏幕上位置。
并且,请确保您将 1.0
作为动画持续时间传递。
【讨论】:
【参考方案3】:使用这些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];
【讨论】:
以上是关于UIView 动画滑入的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中,如何使用自动布局为 UIView 设置动画,就像页面滑入一样?