Я создал UIView и несколько слоев. Я организовал эти слои в иерархию superview-subview с корнем в слое UIView, добавил некоторые распознаватели жестов, и я пытаюсь управлять геометрией слоев на событиях из распознавателей жестов (точно устанавливая границы и положение). Я использую неявную анимацию и CATransaction. Явные анимации не используются.
Фактический результат достаточно хорош, если я создаю CATransaction с длительностью = 0. Но если я установлю длительность на 0.2, я получу некоторые странные результаты: поскольку событие происходит не быстро, и предыдущая транзакция успевает завершиться, прежде чем следующая запустит все все в порядке (например, при нажатии), но если не хватает времени (например, при сжатии или панорамировании), изменяемый слой начинает дергаться. Визуально это выглядит так, как будто анимация возвращается к начальной точке и начинается снова с новым значением.
Я не вижу причин для этого. Я попытался выполнить макет в -[UIView layoutSubviews]
и вызвать setNeedsDisplay
в обработчиках распознавания жестов. Я также пытался разделить эту логику на отдельный метод, но это не помогает.
Еще раз повторяю, что я использую только неявные анимации. И я хочу знать, почему это происходит (но не как обойти это).
Есть какие-нибудь подсказки?