2010-07-01 4 views
0

Я искал способ улучшить производительность моего CATiledView. Вид занимает почти весь экран (у меня есть версия для iPad и iPhone). В настоящее время занимает всего 12 секунд, чтобы плитки полностью заполнились (12 секунд на обоих устройствах). Я видел, что другие приложения используют CATiledView, и для заполнения плиток требуется намного меньше времени.улучшение производительности CATiledView

Изображение, которое я использую, составляет 1 7000x5000 JPEG. Я попытался уменьшить изображение doen до 5500px, и нет никакого изменения в времени загрузки, поэтому мне кажется, что это проблема с моим кодом, который выглядит следующим образом:

Обновление: я попытался уменьшить размер изображений (более чем наполовину), и нет никакой разницы, что я могу сказать.

-(void) loadMap{ 

     ... 
     UIImage *tempImage = [UIImage imageWithData:data]; 
     self.image = tempImage; 

     CGRect pageRect = CGRectMake(0, 0, image.size.width, image.size.height); 

     CATiledLayer *tiledLayer = [CATiledLayer layer]; 
     tiledLayer.anchorPoint = CGPointMake(0.0f, 1.0f); 
     tiledLayer.delegate = self; 
     tiledLayer.levelsOfDetail = 6; 
     tiledLayer.levelsOfDetailBias = 0; 
     tiledLayer.bounds = pageRect; 
     tiledLayer.transform = CATransform3DMakeScale(1.0f, -1.0f, 0.3f); 
     CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height); 
     myContentView = [[UIView alloc] initWithFrame:imageRect]; 
     [myContentView.layer addSublayer:tiledLayer]; 

     UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.chartView.frame]; 
     scrollView.delegate = self; 
     scrollView.contentSize = pageRect.size; 
     scrollView.minimumZoomScale = .2; 
     scrollView.maximumZoomScale = 1; 

     scrollView.clipsToBounds = YES; 
     [scrollView addSubview:myContentView]; 
     [self.chartView addSubview:scrollView]; 
     scrollView.zoomScale = .2; 


} 

    - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
    { 


     CGRect imageRect = CGRectMake (0.0, 0.0, image.size.width, image.size.height); 
     CGContextDrawImage (ctx, imageRect, [image CGImage]); 

    } 
+0

Профилировали ли вы свой код? Или просто пройдите по ней по очереди с отладчиком. Я считаю, что загрузка изображения (ваша первая строка кода) занимает большую часть. – Eiko

ответ

1

Я нашел ответ и образец кода в одном из этих видеороликов WWDC. Если у вас есть доступ, проверьте, что это 104, я считаю, называется Scroll Views