【问题标题】:Use UIView animation to implement kCATransitionPush from CATransition使用 UIView 动画从 CATransition 实现 kCATransitionPush
【发布时间】:2011-07-24 07:59:24
【问题描述】:

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

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

谢谢!

狮子座

【问题讨论】:

    标签: iphone ios cocoa-touch core-animation


    【解决方案1】:

    通过阅读您发布的苹果文档,它似乎还说:

    基于块的动画方法(例如 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"];
    

    }

    【讨论】:

      【解决方案2】:

      该文档指的是推荐基于块的 UIView 动画,而不是使用 beginAnimationscommitAnimations 的旧 UIView 调用。它与 CATransition 无关。您可以毫无顾虑地继续使用 Core Animation。

      【讨论】:

        【解决方案3】:

        试试下面的代码来显示视图

        -(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];

        希望对你有帮助..!!!

        【讨论】:

          【解决方案4】:

          这里是一个 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)
          }
          

          【讨论】:

            猜你喜欢
            • 2012-03-21
            • 1970-01-01
            • 1970-01-01
            • 2015-05-06
            • 2017-12-06
            • 2011-10-31
            • 2012-05-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多