使用UIView动画从CATransition实现kCATransitionPush

时间:2011-07-24 07:59:24

标签: iphone ios cocoa-touch core-animation

Apple建议在iOS4及更高版本(here)中使用UIView动画块,但我非常喜欢使用kCATransitionPush效果的旧版CATransition。如何使用UIView动画实现kCATransitionPush?我只在可用选项中看到四种类型的视图转换(向左/向右翻转,向上/向下卷曲)

如果我自己实施,我打算创建一个新视图并将其滑入,同时滑出旧视图。我不明白为什么苹果不包含UIView动画中的“推”效果。

谢谢!

LEO

4 个答案:

答案 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)

该文档指的是使用beginAnimationscommitAnimations的旧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];

我希望它可以帮助你...... !!!!