Это мой код изменения размера изображения:
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];
Я делаю все это из фонового потока, чтобы предварительно загрузить картинки, чтобы мой графический интерфейс чувствовал себя быстро.Потребовалась некоторая работа по настройке синхронизации, а не по настройке, чтобы CALayers оказались в поле зрения.
Но я считаю, что термин для описания того, как быстро это будет, будет "это собака".
По сравнению с IKImageView - эта штука поднимает миниатюры изображений быстрее, чем я могу прокручивать.
У кого-нибудь есть какие-либо предложения о том, как справиться с этим лучше, чем я делаю сейчас?
Другими словамиМоя проблема в том, что я хочу иметь супер-быстрый UX.Я считаю, что способ сделать это - предварительно загрузить вещи в CALayers (это может быть неправильно? Я пробовал NSImageView и некоторые IK-вещи, но, по крайней мере, CALayer лучше, чем это).