Я пытаюсь создать подкласс NSView, который может дать мне доступ к слою, для которого я могу управлять такими параметрами, как обычно запрещенные, как anchorPoint и transform, а также применять анимацию.
My планировалось создать представление размещения слоя, а затем добавить подслой к слою root. Это работает отлично, за исключением того, что мне очень трудно позиционировать и определять размер этого подслоя. Я чувствую, что упускаю что-то очевидное, но не могу понять.
Моя первая попытка состояла в том, чтобы установить layoutManager
слоя root на CAConstraintLayoutManager
. Это прекрасно работает , если Я не установил свойство подслоя transform
. CAConstraintLayoutManager
обновляет фрейм слоя напрямую, и это вызывает проблемы с преобразованиями вращения. У меня ушло навсегда, чтобы понять это, но я в конечном итоге нашел документацию , которая объясняет это.
Хорошо, так что теперь я сделал пользовательский CALayoutManager
, который просто настраивает подслой bounds
и position
вместо смены кадра. Кажется, это работает, но портит макет, если у моего представления есть подпредставления. Это удивило меня. Я предполагаю, что это мешает внутренней системе макета NSView, когда задействованы другие слои?
Итак, я перешел к использованию root метода делегирования слоя func layoutSublayers(of layer: CALayer)
. Это также портит компоновку, так как я не осознавал, что NSView сам по себе ожидает быть делегатом слоя root и использует этот метод специально.
Так что на данный момент я в растерянности. Я не могу понять, как управлять макетом и , а также применить преобразование к подслою. У кого-нибудь есть предложения?