私は次のコードを使用して画面外に画像を作成し( を
context
使用してバックグラウンド スレッドで画面外にを作成しGDC
)、後で
更新された「UIImages の配列」を受け取ったときにのみ、画面上のメイン スレッドでレンダリングします
。
そうすることで、レンダリングパス、ライン
などは UIView の drawRect: メソッドを実行するよりもはるかに高速であることがわかりました。
私が今直面している問題は、それを使用して UIImage クラスをレンダリングしようとすると、
CGContextDrawImage()
レンダリングが 1.4 ~ 2.5 秒で非常に遅くなることです。検索
の主な問題は、ほとんどの時間を png ファイルの収縮に費やすことでした。私は
png画像を膨らませようとしましたが、CGImageRef
まだ長いレンダリング時間を使用しています。png
ファイルが入ってくる場合、リストを含むデータ配列を制御できません。
画像を細かく分割するか、ヘルプを使用して、
「」を使用せずにそれらの画像をCALayer
ステッチする方法は可能ですか?
この問題を解決する最善の方法と、どのようにアイデアがあればよいかわかりません。 CGContextDrawImage
前もって感謝します
void creatImageInBackground
{
size = CGSizeMake (self.frame.size.width,self.frame.size.height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
UIGraphicsPushContext(context);
for(UIImage * img in imgList )
{
ulXY = <calcuate >;
lrXY = <calcuate >;
imRec = CGRectMake( ulXY.x,-ulXY.y,(lrXY.x-ulXY.x) ,(lrXY.y -ulXY.y) );
CGContextTranslateCTM( context, 0,(lrXY.y-ulXY.y) );
CGContextScaleCTM(context, 1, -1);
CGContextDrawImage(context, imRec,[[img image] CGImage]);
//[img drawInRect:imRec];
}
UIGraphicsPopContext();
[outputImage release];
outputImage = UIGraphicsGetImageFromCurrentImageContext() ;
[outputImage retain];
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^(void)
{
[self setNeedsDisplay];
[self setHidden:NO];
});
}
Then
- (void)drawRect:(CGRect)rect
{
CGPoint imagePoint = CGPointMake(0, 0);
[outputImage drawAtPoint:imagePoint];
}