EXC_BAD_ACCESS при перемещении UIBezierPath при переводе с использованием CATiledLayer

У меня есть UIScrollView, который содержит «Draw View», с помощью которого пользователь может рисовать UIBezierPath от руки. Он использует CATiledLayer, поэтому я могу масштабировать без размытия.

Когда я рисую пути, ошибки EXC_BAD_ACCESS нет, несмотря на то, что штрих вызывается много раз. Однако, когда я перевожу путь с помощью CGAffineTransForm, он длится менее нескольких секунд, прежде чем выдает ошибку EXC_BAD_ACCESS при обводке пути. Это также визуально создает артефакты с путем.

Я уверен, что это как-то связано с тем, что CATiledLayer не нравится перевод, потому что, когда я перестаю использовать CATiledLayer, никаких проблем нет - путь переводится, как и ожидалось, без артефактов. Однако мне нужно, чтобы CATiledLayer масштабировался без размытия (насколько я знаю, нет альтернативного решения, кроме как просто установить масштабный коэффициент содержимого на уровень масштабирования).

Использование памяти/ЦП не является ненормальным, когда выдается ошибка.

Стоит отметить, что я использую бета-версии iOS 11 и Xcode 9. (Редактировать: происходит и на iOS 10, но все еще с использованием той же бета-версии Xcode 9)

Я пытался включить объекты-зомби, но это не дает никакой полезной информации.


person Community    schedule 15.08.2017    source источник
comment
Но ваш код секретный?   -  person matt    schedule 15.08.2017


Ответы (1)


CATiledLayer использует несколько потоков для отрисовки своего содержимого. Многие операции UIKit необходимо выполнять из основного потока. Лучший способ сохранить преимущества мозаичного слоя — использовать основной графический путь вместо пути UIKit. См. также Технические вопросы и ответы 1637.

person clemens    schedule 15.08.2017
comment
Я попытался нарисовать CGPath. Теперь это работает нормально при переводе, но по-прежнему вылетает с EXC_BAD_ACCESS, когда я пытаюсь масштабировать или поворачивать его. - person ; 15.08.2017
comment
Без вашего кода никто не сможет вам помочь. - person clemens; 16.08.2017