Apple建议在iOS4及更高版本(here)中使用UIView动画块,但我非常喜欢使用kCATransitionPush效果的旧版CATransition。如何使用UIView动画实现kCATransitionPush?我只在可用选项中看到四种类型的视图转换(向左/向右翻转,向上/向下卷曲)
如果我自己实施,我打算创建一个新视图并将其滑入,同时滑出旧视图。我不明白为什么苹果不包含UIView动画中的“推”效果。
谢谢!
LEO
答案 0 :(得分:4)
通过阅读您发布的苹果文档,它似乎也会说:
基于块的动画方法(如 animateWithDuration:animations :)大大简化了创建 动画。使用一个方法调用,可以指定动画 执行和动画的选项。但是,基于块 动画仅在iOS 4及更高版本中可用。如果你的申请 在早期版本的iOS上运行,你必须使用 beginAnimations:context:和commitAnimations类标记方法 动画的开始和结束。
我认为这意味着他们推荐它因为它极大地简化了动画的制作。它还指出它不适用于任何没有ios 4的设备。如果你知道如何使用CAAnimation,我会继续使用它。我仍然没有任何问题地使用它:
- (void)switchTwoViews:(UIView *)view1 otherView:(UIView *)view2 direction:(int)directionRL{
view2.frame = CGRectMake(0, 0, 400, 211);
visibleView = view2;
// remove the current view and replace with view1
[view1 removeFromSuperview];
[currentOptionsView addSubview:view2];
// set up an animation for the transition between the views
CATransition *animation = [CATransition animation];
[animation setDuration:0.3];
[animation setType:kCATransitionPush];
if (directionRL == 0) {
[animation setSubtype:kCATransitionFromRight];
} else {
[animation setSubtype:kCATransitionFromLeft];
}
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[currentOptionsView layer] addAnimation:animation forKey:@"SwitchToView"];
}
答案 1 :(得分:2)
该文档指的是使用beginAnimations
和commitAnimations
的旧UIView调用推荐基于块的UIView动画。它与CATransition无关。您可以毫无后顾之忧地继续使用Core Animation。
答案 2 :(得分:1)
这是一个Swift函数,它根据给定的标志从左/右动画视图:
func animateSwipe(on view: UIView, left: Bool) {
let transition = CATransition()
transition.duration = 0.45
transition.type = kCATransitionPush
transition.subtype = left ? kCATransitionFromLeft : kCATransitionFromRight
transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
view.layer.add(transition, forKey: nil)
// change anything you want on the view in a reload(view: UIView) function
reload(view)
}
答案 3 :(得分:0)
尝试使用以下代码显示视图
-(void)slideViewTransition:(UIView*)slidingView
{
CATransition *animation = [CATransition animation];
[animation setDuration:0.4];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromTop];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[slidingView layer] addAnimation:animation forKey:nil];
}
当您需要隐藏视图时,只需将[animation setSubtype:kCATransitionFromTop]
更改为[animation setSubtype:kCATransitionFromBottom];
我希望它可以帮助你...... !!!!