1

下面的代码非常简单。_facebookF是一个UIImageView

if (animationOn == YES) {
    [UIView animateWithDuration:0.4 animations:^{
        [_faceBookF setAlpha:0];
    }];
    [_faceBookF setImage:[UIImage imageNamed:@"facebookFBlue.png"]];
    [UIView animateWithDuration:0.4 animations:^{
        [_faceBookF setAlpha:1];
    }];

     } else {
    [UIView animateWithDuration:0.4 animations:^{
        [_faceBookF setAlpha:0];
    }];
    [_faceBookF setImage:[UIImage imageNamed:@"facebookF.png"]];
        [UIView animateWithDuration:0.4 animations:^{
         [_faceBookF setAlpha:1];
    }];
}

应用程序可以正常访问包含此代码的方法,但在整个代码块中不会对 UI 进行任何更改。据我所知,该应用程序正在主线程上运行。

有什么猜测吗?

更新——事实上,问题在于图像根本没有被改变——无论有没有动画。这两个图像在应用程序的其他部分都可以正常访问。

4

3 回答 3

3

看起来您正在尝试运行顺序动画,但是按照您对它们进行编码的方式,它们很可能是并行运行的。你需要做的是:

if (animationOn == YES) {
    [UIView animateWithDuration:0.4 animations:^{
        [_faceBookF setAlpha:0];
    } completion:^(BOOL finished) {

        [_faceBookF setImage:[UIImage imageNamed:@"facebookFBlue.png"]];
        [UIView animateWithDuration:0.4 animations:^{
           [_faceBookF setAlpha:1];
        }];
    }];



 } 
 else {
   [UIView animateWithDuration:0.4 animations:^{
      [_faceBookF setAlpha:0];
   }completion:^(BOOL finished) {

    [_faceBookF setImage:[UIImage imageNamed:@"facebookF.png"]];
        [UIView animateWithDuration:0.4 animations:^{
         [_faceBookF setAlpha:1];
    }];
 }];
}
于 2012-04-28T12:47:59.027 回答
2

试试这个。这将在第一个动画完成后开始第二个动画。所以它会淡出 UIImageView 然后用不同版本的图像淡出它。

 [UIView animateWithDuration: 0.4
                  animations:^
     {
         [_faceBookF setAlpha:0];
     }
                 completion:^(BOOL finished)
     {
         [_faceBookF setImage:[UIImage imageNamed:@"facebookFBlue.png"]];
         [UIView animateWithDuration:0.4
                          animations:^
          {
              [_faceBookF setAlpha:1];
          }];
     }];
于 2012-04-28T12:47:17.313 回答
0

感谢您的回复。我已经实现了你们提到的完成块,以避免两个动画同时触发。但是,主要问题与未正确访问该方法有关。我不明白为什么,因为facebookF变量不是 nil,并且该方法中的 if 和 log 语句工作正常。无论如何,我已经切换到一个NSNotification解决方案,现在该方法的所有部分都被访问了。

于 2012-04-29T14:55:53.943 回答