2

画像ビューのアニメーションに大きな遅延があります。

ナビゲーションベースのアプリケーションを作成しています。

3 番目のビュー コントローラーの viewDidLoad で、イメージ ビューを作成し、それをサブ ビューとして追加しました。

self.myImageView = [[UIImageView alloc]initWithFrame:CGRectMake(259, 46, 496, 470)];
self.myImageView.image = [UIImage imageNamed:@"foo.png"];
[self.view addSubview:self.myImageView];

ボタンをクリックすると、myImageViewをあるアニメーションから別のアニメーションに切り替えたいと思います。

画像のアニメーション配列が 2 つあります。初めて。

ボタンをクリックすると、次のように画像ビューがアニメーション化されます。

 self.myImageView.animationImages = self.openAnimationArray;
    [self.myImageView startAnimating];
    self.myImageView.animationRepeatCount = 0;

次のボタンを押すと、同じ ImageView を別の一連の画像配列でアニメーション化しました。

self.myImageView.animationImages = self.closeAnimationArray;
[self.myImageView startAnimating];
self.myImageView.animationRepeatCount = 0;

私の最初の問題は、3 番目のビュー コントローラーに移動する際の遅延でした。

この遅延は、3 番目のビュー コントローラーへの最初のナビゲーションでのみ発生します。画像のキャッシングが原因かと思いますが、2回目以降はナビゲーションの遅延がありません.UIImage imageNamed関数の画像キャッシング。したがって、初回のナビゲーションの遅延を回避するために、アプリのデリゲート自体から画像を強制的にロードしました。

 NSArray * openAnimationArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"1.png"],[UIImage imageNamed:@"2.png"],[UIImage imageNamed:@"3.png"],[UIImage imageNamed:@"4.png"],[UIImage imageNamed:@"5.png"], nil];
    for (id object in openAnimationArray) 
    {

        [object forceLoad];

    } 

強制荷重の方法を以下に示します。

- (void) forceLoad
{
    const CGImageRef cgImage = [self CGImage];  

    const int width = CGImageGetWidth(cgImage);
    const int height = CGImageGetHeight(cgImage);

    const CGColorSpaceRef colorspace = CGImageGetColorSpace(cgImage);
    const CGContextRef context = CGBitmapContextCreate(
                                                       NULL, 
                                                       width, height, 
                                                       8, width * 4, 
                                                       colorspace, kCGImageAlphaNoneSkipFirst);

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
    CGContextRelease(context);
}

しかし、最初のアニメーションにはまだ遅延があり、アプリケーションのパフォーマンスに非常に悪い影響を与えています。どうすればこの問題を解決できますか。

4

1 に答える 1

0

これを試して:

  NSArray * openAnimationArray = [NSArray arrayWithObjects:[UIImage initWithContentsOfFile:@"1.png"],[UIImage initWithContentsOfFile:@"2.png"],[UIImage initWithContentsOfFile:@"3.png"],[UIImage initWithContentsOfFile:@"4.png"],[UIImage initWithContentsOfFile:@"5.png"], nil];

UIImage initWithContentsOfFile:@"2.png"]よりも高速です[UIImage imageNamed:@"2.png"]。キャッシュなしで画像をロードするためです。

于 2012-10-13T11:23:44.367 に答える