Странное поведение CGLayerCreateWithContext на iPad 2 против нового iPad?
В приложении Single View приложение FooView является основным. В FooView drawRect
, если я сделаю
if (!self.layer1) {
CGContextRef context = UIGraphicsGetCurrentContext();
NSLog(@"current context is drawRect is %@", context);
self.layer1 = CGLayerCreateWithContext(context, self.bounds.size, NULL);
NSLog(@"layer1 is %@", self.layer1);
self.context1 = CGLayerGetContext(self.layer1);
CGContextSetFillColorWithColor(self.context1, [[UIColor orangeColor] CGColor]);
}
CGContextRef context = UIGraphicsGetCurrentContext();
NSDate *start = [NSDate date];
CGContextDrawLayerAtPoint(context, CGPointZero, self.layer1);
NSTimeInterval timeInterval = -[start timeIntervalSinceNow];
NSLog(@"It took %f to draw", timeInterval);
И я использую CADisplayLink
вызвать метод, который вызывает [self.view setNeedsDisplay]
в контроллере вида, так что drawRect
вызывается каждый 1 кадр, или 5 кадров, или 20 кадров, используя frameInterval
имущество.
На iPad2 время рисования, когда CGLayer заполнен сотнями прямоугольников размером 6x6, составляет от 0,011 до 0,012 секунды, как указано в инструкции NSLog. Это способно к 60 кадрам в секунду. (60 кадров в секунду - 0,01666 секунды на кадр)
Если я изменю строку на:
self.layer1 = CGLayerCreateWithContext(NULL, self.bounds.size, NULL);
(с помощью NULL
вместо context
). Тогда время составляет около 0,014 секунды, что все еще хорошо для 60 кадров в секунду.
Но на новом iPad происходит обратное: если context
был использован на этой линии, а затем время колоссальные 0,17 секунды... что не хорошо даже для 6 кадров в секунду. Если NULL
используется, тогда время составляет 0,038, что не хорошо для 60 кадров в секунду, но по крайней мере это хорошо для 20 кадров в секунду, что все еще приемлемо. Кто-нибудь знает, почему он так себя ведет и как заставить его работать хорошо или лучше на всех платформах iPad, iPad 2 и New iPad?
Если звонит CGLayerCreateWithContext
с NULL
дал кешированный графический контекст графического процессора и вызов с context
дал растровый контекст, то почему на iPad2, это на самом деле быстрее, если вызов CGLayerCreateWithContext
с context
?
(Я использую iOS 5.1.1 на новом iPad и iOS 5.1 на iPad 2... что не должно быть такой большой разницей... и я не хочу обновлять iPad2, чтобы иметь другой устройство с другой версией iOS для проверки моего приложения).