UIImageView
を使用して、 (指の写真)を右から左にアニメーション化しようとしていCGAffineTransformMakeTranslation()
ます。このアニメーションは、ユーザーがスワイプを実行するまで繰り返され、ユーザーはチュートリアルに沿って移動します。これらはすべて、次のようにすでに順調に機能しています。
[UIView animateWithDuration:1.0 animations:^ {
self.finger.alpha = 1.0;
}completion:^(BOOL finished) {
CGAffineTransform originalTransform = self.finger.transform;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^ {
self.finger.transform = CGAffineTransformMakeTranslation(-200, 0);
self.finger.alpha = 0.0;
}completion:^(BOOL finished) {
self.finger.transform = originalTransform;
NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(repeatSwipeAnimation1) userInfo:nil repeats:YES];
self.swipeTimerForFinger1 = timer;
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:self.swipeTimerForFinger1 forMode:NSDefaultRunLoopMode];
[self.swipeTimerForFinger1 fire];
}];
}];
そしてセレクター:
-(void)repeatSwipeAnimation1 {
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationCurveEaseIn animations:^ {
self.finger.alpha = 1.0;
}completion:^(BOOL finished) {
CGAffineTransform originalTransform = self.finger.transform;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^ {
self.finger.transform = CGAffineTransformMakeTranslation(-200, 0);
self.finger.alpha = 0.0;
}completion:^(BOOL finished) {
self.finger.transform = originalTransform;
}];
}];
}
指は美しく動き、移動します。
問題は、別のタイマーを使用して別の指でこれを実行したい場合です。私はまったく同じコードを持っていますが、タイマーの指とセレクターが異なります。
何が起こるかというと、タイマーのセレクターがUIImageView を変換せず、(さらに恐ろしいことに) 無効にするメソッドを呼び出してもタイマーが無効になりません。デバッグ時に、2 番目のタイマーが 2 番目のセレクターを呼び出していることがわかりますが、動作していません (たとえば、翻訳せず、2 番目の指のフェードインが速すぎるなど)。
私が想定しているのは、最初に呼び出すときに NSRunLoop をオフにする必要があるということですか? NSRunLoop を使用するのはこれが初めてなので、無知で申し訳ありません。どんな助けも非常に役に立ちます。