试图淡化UIView但没有成功

时间:2010-01-25 10:48:11

标签: objective-c animation uiview

我试图淡化UIView作为我主视图的子视图。我试图淡入的UIView的尺寸为320x55。

我设置了视图和计时器;

secondView.frame = CGRectMake(0, 361, 320, 55);
secondView.alpha = 0.0;
[self.view addSubview:secondView];
[NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(fadeView) userInfo:NO repeats:NO];

计时器触发以下代码;

secondView.alpha = 1.0;
CABasicAnimation *fadeInAnimation;
fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.duration = 1.5;
fadeInAnimation.fromValue = [NSNumber numberWithFloat:0.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
[fadeInAnimation setDelegate:self];
[secondView.layer addAnimation:fadeInAnimation forKey:@"animateOpacity"];

我的第二个视图在Interface Builder中连接并响应其他消息,但我看不到屏幕上发生的任何事情。

有人可以帮我弄清楚这里发生了什么吗?

谢谢, 瑞奇。


回复以下建议:

我在这里有点不确定。最初我把这段代码放进去(因为我把secondView视为UIView的一个实例?):

[secondView beginAnimations:nil context:NULL]; 
[secondView setAnimationDuration:0.5]; 
[secondView setAlpha:1.0]; 
[secondView commitAnimations]; 

然后我尝试了你的建议,但没有产生警告或错误,但它仍然没有带来任何表面:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[secondView setAlpha:1.0]; 
[UIView commitAnimations]; 

谢谢!瑞奇。


4 个答案:

答案 0 :(得分:43)

你应该能够做到这一点更简单。你尝试过这样的事吗?

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[secondView setAlpha:1.0];
[UIView commitAnimations];

答案 1 :(得分:16)

在我看来,你遗漏的一件事是你的观点可能已经有了1.0的alpha值。在动画调用之前确保alpha为0(或任何你想要的)。

我更喜欢使用块动画。它更清洁,更独立。

secondView.alpha = 0.0f;
[UIView animateWithDuration:1.5 animations:^() {
    secondView.alpha = 1.0f;
}];

答案 2 :(得分:11)

如果您坚持使用CoreAnimations,这将无法回答您的问题,但对于iPhoneOS,使用动画块进行UIView动画要容易得多。

secondView.alpha = 0.0f;
[UIView beginAnimations:@"fadeInSecondView" context:NULL];
[UIView setAnimationDuration:1.5];
secondView.alpha = 1.0f;
[UIView commitAnimations];

此外,您可以使用

在延迟时间内调用委托
[self performSelector:@selector(fadeView) withObject:nil afterDelay:0.5];

答案 3 :(得分:8)

这也是一个很好的选择,有很多选项,而且易于使用。

  [secondViewController.view setAlpha:0.0];
  [UIView animateWithDuration:1.5
          delay:0.0 
          options:UIViewAnimationOptionCurveEaseIn // See other options
          animations:^{
            [secondViewController.view setAlpha:1.0];
        } 
        completion:^(BOOL finished) {
        // Completion Block
        }];