これは私の画像リサイズコードです:IKImageBrowserViewはイメージのサイズをできるだけ速く変更できますか?
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はそれより優れています)。
/長時間読者、初回作家 - SOのルール、私はあなたがGoogleのランキングを変更したことを意味... omg! :)ここで
OS X 10.5との互換性が必要ですか、または10.6のみでOKですか? (投稿したコードにはすでに10.6が必要ですが、明確にするのに役立ちます)。 – NSGod
10.6のみが問題ありません。互換性に関するヒット "リセット"のアプリストアの並べ替え、いいえ? :) – Torkel