0

私のアプリケーションには、寸法が 640*1136 の.jpgファイルの 260 個の画像のアニメーションがあります。以下のように、すべての画像を配列にロードします。

ボタンクリック時

- (void)singButtonClick:(id)sender
{
    [self initSingArray];
    [self startAnimationWithImages:singArray duration:2];
}

配列を初期化し、リソースフォルダーから260個の画像すべてをロードします

self.imageArray = [[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:nil];


- (void)initSingArray
{
    if (!singArray)
    {
        singArray=[[NSMutableArray alloc] init];

        for(NSString *str in self.imageArray)
        {
            if([[str lastPathComponent] hasPrefix:@"Sing_"])
            {
                [singArray addObject:[UIImage imageNamed:[str lastPathComponent]]];
            }
        }
    }
}

画像アニメーションの場合は、単にその配列を使用して UIImageView に渡しました

- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration
{
    [self startAnimationWithImages:images duration:duration repeatCount:1];
}

- (void)startAnimationWithImages:(NSMutableArray*)images duration:(NSTimeInterval)duration repeatCount:(int)repeatCount
{
    if (self.gifImageView.isAnimating) 
    {
        [self.gifImageView stopAnimating];
    }

    self.gifImageView.animationImages = nil;
    self.gifImageView.animationImages = images;          // Animated image array
    self.gifImageView.animationDuration = duration;      // Perform a full animation when
    self.gifImageView.animationRepeatCount = repeatCount;// Animation number of repetitions
    [self.gifImageView startAnimating];
}

ただし、最初にボタンをクリックすると、アニメーション化に時間がかかります。画像の数が少ない場合は正常に機能します。

画像の寸法が問題になりますか?

それを解決するのを手伝ってください。

:この質問に関連する多くの投稿を見つけましたが、この問題を解決するのに役立つものはありません。

4

3 に答える 3

0

ボタンをクリックするのではなく、他の場所でこれ[self initSingArray];を行う必要があります。viewDidLoadそれはあなたの問題を解決します。あなたの場合の理由は、最初に画像配列が作成されるため、時間がかかるためです。

于 2013-06-11T10:20:45.000 に答える
0

imageview-animation-getting-more-memoryで、同じ種類の質問に対する私の回答を参照してください。肝心なのは、animationImages アプローチと多くの画像を使用してアプリを動作させることは決してないということです。既にメモリの問題に対処しており、アニメーションの表示が始まる前にすべての画像データをメモリにデコードすることを回避する方法を提供する既存のソリューションを使用することをお勧めします (アニメーションの開始が非常に遅いのはそのためです)。

于 2013-07-01T08:50:04.077 に答える
0

多くの研究開発の後、最終的に私はこの問題をいくつかの火格子のブログ投稿で解決しました。

アニメーション化にUIImageViewを使用する代わりに、この格子チュートリアルを試してくださいMemory_usage_on_ios

および簡略化された PNG アニメーションのサンプル コード

この回答が、メモリリークの問題なしに多くの画像フレームをアニメーション化するのに役立つことを願っています。

于 2013-07-24T10:31:22.800 に答える