Я реализую CATiledLayer
в UIScrollView
. В CATiledLayer
, у меня есть функция, чтобы нарисовать слои так:Как заставить CATiledLayer блокировать основной поток
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
CGContextTranslateCTM(ctx, 0.0f, 0.0f);
CGContextScaleCTM(ctx, 1.0f, -1.0f);
CGRect box = CGContextGetClipBoundingBox(ctx);
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"urlhere"]];
UIImage *image = [[UIImage alloc] initWithData:data];
CGContextDrawImage(ctx, box, [image CGImage]);
[image release];
[data release];
}
Проблема заключается в том, что, когда каждая плитка загружает его блокирует загрузку других плиток. Я бы очень хотел, чтобы эти плитки были загружены параллельно. В частности, он блокирует загрузку другого элемента интерфейса, который я не контролирую.
В принципе, мне просто нужно знать, как загружать данные асинхронно в сообщении чертежа CATiledLayer
.
Итак, после того, как данные будут загружены и нарисованы на экране, я должен освободить UIImage? Если я отворачиваюсь и вернусь, он все равно будет там нарисован? – rickharrison
Данные кэшируются, но вы не можете контролировать кеширование, поэтому ваш код должен ожидать, что drawLayer: inContext может быть вызван повторно – JakubKnejzlik