9

私のアプリでは、スクリーンショット方式を使用しています。私の iPad 2 では、このメソッドの実行は非常に高速 (約 130 ミリ秒) です。しかし、新しい iPad では (確かに最高の解像度と同じ CPU のため)、700 ミリ秒ほどかかります! メソッドを最適化する方法はありますか? おそらく、グラフィックカードで直接作業する方法はありますか?

これが私のスクリーンショットの方法です:

- (UIImage *)image {
CGSize imageSize = self.bounds.size;

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale);
else UIGraphicsBeginImageContext(imageSize);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, [self center].x, [self center].y);
CGContextConcatCTM(context, [self transform]);
CGContextTranslateCTM(context, -[self bounds].size.width * [[self layer] anchorPoint].x, -[self bounds].size.height * [[self layer] anchorPoint].y);
[[self layer] renderInContext:context];
CGContextRestoreGState(context);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;

}

ご協力いただきありがとうございます。

4

2 に答える 2

3

ポッドキャストでこの問題について話していたのは、Flipboard の開発者だったと思います。iPad 3 ではピクセルが 4 倍になっているため、これは実際の問題です。

彼が行っていたのは、ユーザーがアクションを開始したときではなく、バックグラウンドで事前にスクリーンショットを撮っていたことです。彼の場合、ユーザーがページを「めくった」ときです。

これがあなたの場合に役立つかどうかはわかりませんが、多くの場合に実行可能なアプローチであることは確かです.

于 2012-06-08T02:21:48.740 に答える
0

これはアプリケーションにとって十分である場合とそうでない場合がありますが、1 つのオプションはスクリーンショットを縮小することです。たとえば、スケール ファクターとして 0.5 をUIGraphicsBeginImageContextWithOptionsに渡します。4 倍高速ですが、トレードオフはディテール/解像度の損失です。

于 2012-08-18T22:50:30.587 に答える