画像ビューのアニメーションに大きな遅延があります。
ナビゲーションベースのアプリケーションを作成しています。
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);
}
しかし、最初のアニメーションにはまだ遅延があり、アプリケーションのパフォーマンスに非常に悪い影響を与えています。どうすればこの問題を解決できますか。