在Apple示例之后动画隐藏/显示UIView

时间:2011-11-08 21:29:52

标签: iphone core-animation

我正在尝试做一些简单的动画。我有一个UIViewController,其中有两个视图,它们是主视图的子视图。 (在Interface Builder中,我创建了两个UIView对象,它们都是自己的视图子视图,它们是从UIViewController模板在.xib中自动创建的)。我在IB中隐藏了第二个视图。视图控制器以模态方式呈现为UIModalPresentationFormSheet。按下按钮时,我想隐藏第一个视图,转到第二个视图。我在这里尝试了以下的Apple示例:http://developer.apple.com/library/ios/#samplecode/ViewTransitions/Listings/Classes_ViewTransitionsAppDelegate_m.html#//apple_ref/doc/uid/DTS40007411-Classes_ViewTransitionsAppDelegate_m-DontLinkElementID_4

按下按钮时,这是我的代码:

    CATransition *transition = [CATransition animation];
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.duration = 0.75;
    transition.type = kCATransitionReveal;
    [self.view.layer addAnimation:transition forKey:nil];
    self.FirstScreen.hidden = YES;
    self.SecondScreen.hidden = NO;

不幸的是,我没有得到任何动画。我得到了我想要的隐藏/取消隐藏,但没有过渡动画。所以我的第一个问题是我在代码中做错了什么?

一个问题是,你能用块做这样的事吗?我在块中做过一些简单的动画,比如用

更改alpha
[UIView animationWithDuration... ]

但不知道如何用块进行上述转换。

1 个答案:

答案 0 :(得分:1)

而不是动画hidden属性尝试动画:

self.FirstScreen.alpha = 0.0;
self.SecondScreen.alpha = 1.0;

self.FirstScreen.layer.opacity = 0.0;
self.SecondScreen.layer.opacity = 1.0;

从这里开始 - UIView Class Reference

UIView类的以下属性是可动画的:

@property frame   
@property bounds   
@property center  
@property transform   
@property alpha   
@property backgroundColor   
@property contentStretch

另一种解决方案:

[UIView animateWithDuration:0.75 delay:0 
                 options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         self.FirstScreen.alpha = 0.0;
                         self.SecondScreen.alpha = 1.0; 
                     }
                     completion:nil];