-1

いくつかのサブビューをアニメーション化しています。アニメーションの手順の 1 つは、ビューの背景色を変更することです。しかし、ランダムな色を返す関数がありますが、背景色が設定されると、アニメーションの定義中に関数を再度呼び出して別の色を取得することはありません。

アニメーションが実行されるたびに、アニメーションに関数を強制的に呼び出す方法はありますか?


スニペット:

for (UIView* subView in self.view.subviews) {
    dispatch_async(dispatch_get_main_queue(), ^{
                    [UIView animateWithDuration:1.0f
                          delay:0.0f
                        options: UIViewAnimationOptionRepeat
                     animations:^{
                         subView.backgroundColor = getRandomColor();
                     }
                     completion:nil];
                     });
}
4

2 に答える 2

2

getRandomColor();は一度だけ呼び出され、subViewその背景色を 1 秒ごとにその色にアニメーション化します (したがって、元の背景色の色にアニメーション化してから、1 秒ごとに同じ色にアニメーション化します)。

あなたがする必要があるのは、これをメソッドに入れて削除しUIViewAnimationOptionRepeat、メソッドを再度呼び出す UIView アニメーションに完了ブロックを追加することです。

于 2013-03-23T20:05:01.397 に答える
-2

背景色の切り替えだけが必要な場合は、別の方法を次に示します。

  • forループする必要はありません
  • dispatch_async を行う必要はありません

    NSArray *animationImages = [[NSArray alloc] initWithObjects:
    [UIImage imageNamed:@"image1.png"],    
    [UIImage imageNamed:@"image2.png"],
        ....
    [UIImage imageNamed:@"imagen.png"], nil];
    
    self.imageView.animationImages=animationImages;
    self.imageView.animationDuration=1.0;  //set duration
    [self.imageView startAnimating];
    

各 image1..imageN.png が希望する色で構成されている場合、imageView は背景色のプレースホルダー ビューです。

免責事項:アニメーション化可能なプロパティ自体として backgroundcolor を使用すると、より良い解決策が利用できる可能性があります。これは、なぜ GCD を使用しているのかを知らずに使用した可能性がある場合に備えて、GCD の未知数からあなたを救うためです。

于 2013-03-23T18:39:10.297 に答える