これは私の画像サイズ変更コードです:
CALayer *newCALayer = [[CALayer layer] retain];
NSImage* image = [[NSImage alloc] initWithData:[NSData dataWithContentsOfFile:path]];
CGImageRef newCGImageFullResolution = [image CGImageForProposedRect:nil context:nil hints:nil];
CGContextRef context = CGBitmapContextCreate(NULL, drawRect.size.width, drawRect.size.height,
CGImageGetBitsPerComponent(newCGImageFullResolution),
CGImageGetBytesPerRow(newCGImageFullResolution),
CGImageGetColorSpace(newCGImageFullResolution),
CGImageGetAlphaInfo(newCGImageFullResolution));
CGContextDrawImage(context, CGRectMake(0, 0, drawRect.size.width, drawRect.size.height), newCGImageFullResolution);
CGImageRef scaledImage = CGBitmapContextCreateImage(context);
newCALayer.contents = (id)scaledImage;
CGImageRelease(scaledImage);
newCALayer.contentsGravity = kCAGravityResizeAspect;
newCALayer.opacity = 0.0;
newCALayer.anchorPoint = CGPointMake(0.0f,0.0f);
newCALayer.frame = CGRectMake( 0.0,
0.0,
[Singleton sharedSingleton].fullscreenRect.size.width,
[Singleton sharedSingleton].fullscreenRect.size.height);
[newCALayer setAutoresizingMask:kCALayerWidthSizable | kCALayerHeightSizable];
//CGImageRelease(cgImageFullResolution); (bonus points if you can explain why I can't release this! I mean, I can release the scaled image ok??)
CGContextRelease(context);
[image release];
画像をプリロードするためにバックグラウンド スレッドからこれらすべてを行っているため、GUI はきびきびと感じられます。同期を取得するのに多少の作業が必要であり、セットアップされていないため、CALayers が表示されます。
しかし、これがどれほど速いかを説明する用語は「犬だ」と思います。
IKImageView と比較すると、スクロールするよりも速く画像のサムネイルが表示されます。
私が今やっているよりもこれをうまく処理する方法について誰か提案がありますか?
つまり、私の問題は、超高速の UX を実現したいということです。これを達成する方法は、CALayers にプリロードすることだと思います (これは間違っているかもしれません。NSImageView といくつかの IK を試しましたが、少なくとも CALayer はそれよりも優れています)。