CATiledLayer & Retina Display - PullRequest
       26

CATiledLayer & Retina Display

1 голос
/ 16 марта 2012

У кого-нибудь есть хитрости по улучшению производительности CATiledLayer на дисплее сетчатки?

Этот пост: CATiledLayer в имитаторе сетчатки iPad дает низкую производительность

подразумевает, чтоЕсть проблемы с симулятором, но я заметил низкую производительность и на реальном устройстве .Это довольно очевидная проблема, так как она загружает большие плитки быстрее на дисплее сетчатки.Единственное, что я могу сделать, это обработать мозаичные изображения с большим количеством деталей.

Я делаю один маленький трюк:

    CGFloat scale = CGContextGetCTM(context).a / self.contentScaleFactor;

при расчете масштаба, но это не таккажется, достаточно, чтобы справиться с плохой производительностью.

1 Ответ

1 голос
/ 25 марта 2012

На моем виде:

- (id)initWithImageName:(NSString *)name size:(CGSize)size
{

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {

        size = CGSizeMake(size.width*2, size.height*2);

    }

    if ((self = [super initWithFrame:CGRectMake(0, 0, size.width, size.height)])) {

        CATiledLayer *tiledLayer = (CATiledLayer *)[self layer];

        tiledLayer.levelsOfDetail = 4;
        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {

            tiledLayer.tileSize = CGSizeMake(512, 512);
        }

    }

    return self;
}

Это заставило iPad 3 работать как iPad 2 для меня.Если вы делаете что-то еще, например, наложение данных и т. Д., Возможно, вам придется еще немного поспорить.Фактически это просто удваивает размер вашего контента и размер ваших плиток, сводя на нет эффекты отображения сетчатки.

Вы также можете изменить максимальное и минимальное масштабирование масштаба для сетчатки

...