Представьте себе маленькое красное поле (экземпляр CALayer
), нарисованное в левом нижнем углу его родительского слоя (который является корневым слоем слоя, на котором размещен NSView
).
Когда изменяется рамка родительского вида, красное поле должно оставаться в той же позиции на экране. Я делаю это, регулируя его положение относительно левого нижнего угла родительского представления.
Проблема в том, что в некоторых случаях наблюдается мерцание, и я вижу, как слой красной рамки рисуется в левом нижнем углу расширенного кадра, прежде чем он будет показан в правильном положении.
Я предполагал, что объединение смены кадра и положения в одно CATransaction
приведет к обоим изменениям вместе, но это не всегда работает (в документах говорится, что при использовании транзакции анимации начнутся одновременно, но иногда кажется, что это состояние гонки).
Как настроить рамку родительского элемента NSView
, сохранив дочерний слой в его предполагаемом положении?
Пример и код:
![NSView and box layer](https://i.stack.imgur.com/d4EZY.png)
Мои собственные идеи:
Скрыть слой красной рамки, обновить позицию, показать ее снова
Используйте ограничения, чтобы связать его с правым углом. Проблема в том, что это смещение также может измениться, и мне придется обновить ограничение, которое может привести к той же проблеме мерцания.