如何在没有任何透明度/淡入淡出效果的情况下执行kCATransitionPush动画

时间:2010-04-22 00:00:20

标签: iphone objective-c uiviewcontroller uinavigationcontroller core-animation

  

可能重复:
  iPhone CATransition adds a fade to the start and end of any animation?

我正在尝试复制[UIViewController presentModalViewController:animated:]执行的“从底部向上滑动”动画,但没有调用它,因为我不想要模态视图。

以下核心动画代码非常接近但似乎在更改视图的透明度值。在动画开始时,您可以部分地透过视图向上滑动。在动画的中间/结尾,我们滑过的视图是完全透明的,所以我们可以看到它背后。我想在这个动画中保持完全不透明。

有关如何停止透​​明度的任何想法在此代码中更改或以其他方式获取我正在寻找的“向上滑动动画”而不需要模态视图?

UIViewController *nextViewController = [[UIViewController alloc] autorelease];
nextViewController.view.backgroundColor = [UIColor redColor];  
CATransition *animation = [CATransition animation];
animation.duration = 3.5;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
animation.type = kCATransitionPush;
animation.subtype = kCATransitionFromTop;  
[self.navigationController pushViewController:nextViewController animated:NO];
[self.navigationController.view.layer addAnimation:animation forKey:nil];

2 个答案:

答案 0 :(得分:2)

最简单的方法是简单地使用UIView beginAnimations / commitAnimations块。您可以通过查看文档来调整持续时间和曲线。

{   
    // Adjust for orientation as necessary.
    view.frame = CGRectMake(0,
                        -480, 
                        320,
                        480);

    [UIView beginAnimations:nil context:nil];

    view.frame = CGRectMake(view.frame.origin.x,
                        0, 
                        view.frame.size.width,
                        view.frame.size.height);

    [UIView commitAnimations];
}

文档:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

答案 1 :(得分:0)

而不是CATransition,您可以尝试使用CABasicAnimation来动画从屏幕顶部到所需位置的位置。