улучшение производительности CATiledView - PullRequest
0 голосов
/ 01 июля 2010

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

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

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

-(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]);

    }

1 Ответ

1 голос
/ 08 июля 2010

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

...