Я рисую простой чертеж линии (строка с некоторым текстом посередине) в подклассе CALayer с помощью drawInContext(). Я обновляю этот слой, когда пользователь выполняет жест, вызывая на нем setNeedsDisplay. Эффект, который я вижу, - это то, что я мог ожидать, если бы не было двойной буферизации ... i.e вижу части нового рендеринга, перекрывающие части старого рендеринга. Когда я перестаю обновлять (завершать жест), система «догоняет», и я всегда вижу правильный конечный результат, но во время обновлений я вижу непоследовательные результаты ... Этот эффект не является тонким, а иногда и экстремальным ... например. если я продолжу обновление достаточно быстро, я смогу сохранить устаревшие части рисунка на экране для секунд, в то время как новые детали идут вперед ...Почему не кварцевая двойная буферизация моей drawInContext()?
Этого я совсем не понимаю. Если Quartz выполняет буферизацию, то кажется, что он не блиет результат на экране целиком или не просчитывает затронутую область.
Что я пробовал:
1) Я отключить неявные анимации и делать все на чертеже в CATransaction
2) Я не делает ошибку в моем рисунке ... Это буквально просто две строки с некоторым текстом между ними ... нет способа, которым я представляю промежуточные артефакты.
3) Я попытался ограничить скорость обновления, пропустив большинство из них ... но даже при более низкой скорости я вижу артефакты, пока не остановлю обновление и не догоню систему.
4) Кстати, это происходит идентично в симуляторе и на устройстве (iPad).
Нужно ли мне самостоятельно вставлять в буфер вне экрана и копировать его на экран целиком? Я думал, что прочитал, что Кварц делает это для меня.
Update: Как обычно, после нескольких часов стучали голову о стене Я считаю (частичным) ответом 5 минут после размещения вопроса. Я понял, что я использую CATiledLayer для того, чтобы мой слой повторно отображался при масштабировании. Если я переключу его обратно на обычный CALayer, глюки уйдут. Поэтому я предполагаю, что я вижу артефакты отдельной обработки фрагментов. Теперь я пытаюсь выяснить, как бороться с этим ...
Можете ли вы сделать короткий код примера, чтобы воспроизвести проблему? –