CAShapeLayers
私はいくつかを取り、それらをに変換する次のメソッドを持っていますUIImage
。のUIImage
セルで使用されUITableView
ます(ライブラリの1つから写真を選択するときの写真アプリとよく似ています)。このメソッドは、GCD
ブロック内から呼び出されます。
-(UIImage*) imageAtIndex:(NSUInteger)index
{
Graphic *graphic = [[Graphic graphicWithType:index]retain];
CALayer *layer = [[CALayer alloc] init];
layer.bounds = CGRectMake(0,0, graphic.size.width, graphic.size.height);
layer.shouldRasterize = YES;
layer.anchorPoint = CGPointZero;
layer.position = CGPointMake(0, 0);
for (int i = 0; i < [graphic.shapeLayers count]; i++)
{
[layer addSublayer:[graphic.shapeLayers objectAtIndex:i]];
}
CGFloat largestDimension = MAX(graphic.size.width, graphic.size.height);
CGFloat maxDimension = self.thumbnailDimension;
CGFloat multiplicationFactor = maxDimension / largestDimension;
CGSize graphicThumbnailSize = CGSizeMake(multiplicationFactor * graphic.size.width, multiplicationFactor * graphic.size.height);
layer.sublayerTransform = CATransform3DScale(layer.sublayerTransform, graphicThumbnailSize.width / graphic.size.width, graphicThumbnailSize.height / graphic.size.height, 1);
layer.bounds = CGRectMake(0,0, graphicThumbnailSize.width, graphicThumbnailSize.height);
UIGraphicsBeginImageContextWithOptions(layer.bounds.size, NO, 0);
[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = [UIGraphicsGetImageFromCurrentImageContext() retain];
UIGraphicsEndImageContext();
[layer release];
[graphic release];
return [image autorelease];
}
どういうわけか、スクロールしUITableView
て画像を読み込んでいると、少し途切れます。以前は機能していたのでGCD
コードは問題ないので、このコードの何かが途切れを引き起こしているように見えます。誰かがそれが何であるか知っていますか?CAAnimation
スレッドセーフではありませんか?または、誰かがそれらをたくさん取ってCAShapeLayers
変換するためのより良い方法を知っていUIImage
ますか?