0

完成までに時間がかかる(10秒程度)画像を変更する機能があります。この画像は反復ごとに変化するので、毎回表示したいと思います。

をお願いします。

self.imageView.image = [ /* function that changes image */ ];

しかし、私はそれがうまくいかない理由を受け入れます。

私も次のことを試しました:

 self.imageView.animationImages = [NSArray arrayWithObjects:[self.brain newImage],
                                                            [self.brain newImage],
                                                             nil];

しかし、アニメーションが始まるまでには長い時間がかかります。

関数が呼び出されるたびに更新されるアニメーションを作成するにはどうすればよいですか?

注:[self.brain newImage]はUIImageを返す有効な関数であり、毎回変更されます。複雑で問題がないため、実際のコードは含めませんでした。

4

3 に答える 3

1

このコードを試して、画像配列にアニメーションを設定することができます

if(imageArray.count>0)
{
    self.imageView.animationImages= imageArray;
    self.imageView.animationDuration = 1/20;
    self.imageView.animationRepeatCount =1;
    [self.imageView startAnimating];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView commitAnimations];
}

FPSに従ってアニメーション時間を1/20に設定しました。また、アニメーションの繰り返し回数を0に設定して、永久に繰り返すことができます。

于 2013-02-22T04:24:13.273 に答える
0

-newImageメソッドにブロック パラメーターを追加することを検討してください。

- (void)newImageWithSuccessBlock:(void (^)(UIImage *newImage))successBlock
{
    // generate the image on a background thread
    UIImage *brainImage = ...

    // if successful and the completion block isn't nil, run it
    if (successBlock) {
        // NB: if you do use a background queue,
        // remember to dispatch the completion block to the main queue (not shown)
        successBlock(brainImage)  
    }

}

次に、View Controller から新しい画像を生成するときに、画像ビューを更新できます。

[self.brain newImageWithSuccessBlock:^(UIImage *newImage) {

    NSMutableArray *mutableImageArray;
    if (self.imageView.animationImages) {
        mutableImageArray = [self.imageView.animationImages mutableCopy];
    } else {
        mutableImageArray = [NSMutableArray array];
    }

    [mutableImageArray addObject:newImage];

    self.imageView.animationImages = [NSArray arrayWithArray:mutableImageArray];

}];
于 2013-02-22T00:58:38.867 に答える
0

アプローチが問題ない場合はanimationImages、事前にイメージを作成することで、より速く開始できます。

//-- preload images (e.g., while the app is loading)
NSArray* images = [NSArray arrayWithObjects:[self.brain newImage],
                                                        [self.brain newImage],
                                                         nil];
//-- display animation
self.imageView.animationImages = images;

このanimationImagesアプローチには制限があることに注意してください。主に、事前にすべての画像を作成する必要があるという事実です。これには多くのメモリが必要になる可能性があります。

別のアプローチの 1 つは、 aCALayerと aを使用するNSTimerことです。時間が発生するたびlayer.contentsに、 を次の画像に設定します。このアプローチの詳細については、このを参照してください。

より高度なアプローチについては、cocos2d または openGL に頼ることができますが、これはやり過ぎかもしれません。

于 2013-02-21T22:39:33.520 に答える