У меня есть несколько UIViews
, которые имеют класс слоя CATiledLayer
, потому что их нужно увеличить с помощью UIScrollViews
.Я использую Quartz для рендеринга некоторых страниц PDF внутри UIViews
.Все в порядке, пока я не попытаюсь анимировать указанные кадры видов при повороте страницы.
Анимация в порядке, содержимое представления быстро и дешево масштабируется в соответствии с новым размером кадра.После анимации я звоню setNeedsDisplay
, чтобы перерисовать все это.Теперь перед вызовом моего -(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx
get (но после setNeedsDisplay
) содержимое представлений вскоре возвращается к предыдущему состоянию (оставшиеся пиксели становятся растянутыми краями в тех случаях, когда содержимое становится меньше, чем представление).Это приводит к вспышке некоторых очень раздражающих графических искажений перед возвратом к нормальному состоянию благодаря новому «проходу рендеринга».
После большой отладки мне удалось разобраться, что это определенно происходит во время фактическогоцикл рисования (а не цикл выполнения приложения, в котором я выполняю setNeedsDisplay
), но до того, как -(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx
даже будет вызван.
Какой самый разумный способ избежать или отладить это дальше?
Edit : Я собрал очень простой проект, который отлично демонстрирует этот эффект.http://dl.dropbox.com/u/1478968/EEBug.zip PS: в коде рендеринга спит (2), чтобы эффект лучше наблюдался на экране.