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

これを試して。これにより、最初のアニメーションが完了した後、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 に答える