0

スライダーを使用して一連のアニメーションをトリガーする際に問題があります。コードは次のとおりです。

-(void)slideAlpha:(id)sender{

  self.bigPhotoViewA.alpha = self.alphaSlider.value;

  if (self.alphaSlider.value == 1){

    [UIView animateWithDuration:1
                     animations:^{
                         self.alphaSlider.alpha = 0;
                     } completion:nil
    ];

    [self performSelector:@selector(nextPhotoAnimation) withObject:self afterDelay:5.0 ];
  }
}

-(void) nextPhotoAnimation{

  self.alphaSlider.value = 0;

  [UIView animateWithDuration:2
                   animations:^{
                       self.bigPhotoViewA.alpha = 0.0;
                       self.bigPhotoView.alpha = 0.0;
                       self.smallPhotoView.center = CGPointMake(startX, startY);
                   }
                   completion:^(BOOL finished) {
                       NSLog(@"Animation ended");
                       self.smallPhotoView.image = ((UIImage *)[smallImagesArray objectAtIndex:imageCount]);
                   }
  ];
}

そのため、スライダーが値 1 に達するとnextPhotoAnimation、遅延後に起動されます。ここまでは順調ですね。問題は内部にありnextPhotoAnimationます。ブロックは正常に実行されanimationsますが、ブロックが呼び出されるcompletionたびに数回実行されます。nextPhotoAnimation開始時にNSLog6回から9回表示されnextPhotoAnimation、2秒後に適切なタイミングで再び表示されます。

NSLog

より単純なコードで問題を再現しようとしましたが、animation/completionフローは問題なく動作します。

4

2 に答える 2

0

どちらも使用していません

[UIView beginAnimations:nil コンテキスト:nil];

または

[UIView commitAnimations]; 最善の方法は、UIView を作成してからプロトコルを使用することです。 [self YOURMETHOD] を使用してメソッドを呼び出します。ビューで。:-)

于 2014-01-30T10:29:00.847 に答える