8

UIView を常にフェードインおよびフェードアウトさせるために、次のコードを作成しました。(FadeAlphaValue は BOOL です)...

-(void) fade {
    [UIView animateWithDuration:1.0
                     animations:^{
                         fadeView.alpha = (int)fadeAlphaValue;
                     }
                     completion:^(BOOL finished){
                         fadeAlphaValue=!fadeAlphaValue;
                         [self fade];
                     }];
}

それは機能しますが、永久に実行すると奇妙なクラッシュが発生する気がします...私は[..^{..} completion^{...}];その表記法に慣れていません。そして、完了中に「フェード」関数を呼び出しているので、「フェード」関数が完了するまで実際には完了しないように感じます。問題は、フェード関数が完了する前に自分自身を再度呼び出すなどです。無限ループのようです...これは、数百回の反復後に、ある種の奇妙なマルチスレッドのフリーズを引き起こすのでしょうか?

4

1 に答える 1

14

これに対するより良いアプローチはUIViewAnimationOptionRepeat、アニメーションを無期限に繰り返すオプションを使用することです。

[UIView animateWithDuration:1.0f
                      delay:0.0f
                    options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
                 animations:^{
                     // your animation code here
                 }
                completion:nil];//NOTE - this REPEAT animation STOPS if you exit the app (or viewcontroller)... so you must call it again (and reset all animation variables (e.g. alpha) in the UIApplicationDidBecomeActiveNotification function as well (or when the viewcontroller becomes active again)! 
于 2013-09-25T05:26:29.737 に答える