Поворот NSImageView и изменение размера окна программы в macOS


#1

Добрый день!
Пожалуйста, нужно решить проблему.

В проекте есть NSView, на него добавляем как drag and drop картинки и каждая из них внутри NSImageView . Т.е. имеем NSView содержащий NSImageViews. Юзер может выделить нужную картинку и повернуть ее. Поворот картинки осуществляется как поворот содержащий ее NSImageView. Используя для этого следующий код

self.layer!.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.layer!.anchorPoint = CGPoint(x: 0.5, y: 0.5)
self.layer!.setAffineTransform(CGAffineTransform(rotationAngle: angle))

NSView содержащий этот NSImageView имеет кастомный NSClipView, такой что NSView всегда в центре соответствующего NSScrollView при зуме (magnification is ON ) или при растягивании или уменьшении окна программы.
При этих изменениях картинка возвращается в исходное состояние до поворота.

Для зума решил эту проблему с использованием NotificationCenter и NSClipView.boundsDidChangeNotification. Картинку заново поворачиваю в ответ на Notification.

Не могу решить проблему с уменьшении/увеличением окна программы. Пытался поворачивать в ответ на NSView.frameDidChangeNotification. В этом случае это NSView сразу под Window. Пробовал и для NSView содержащий NSImageView, frame и bounds - нет поворота.

Что то я просмотрел похоже, решение должно существовать, поскольку для зума проблема решается. Подскажите пожалуйста!


#2

Нашел решение, может кому пригодится.
Можно выполнить функцию (в моем случае поворот NSImagView) скоординировано с изменением размера окна если использовать одновременно две Notifications -

NSWindow.didResizeNotification
NSWindow.didUpdateNotification

Если использовать только NSWindow.didResizeNotification то функция будет выполняться когда окно изменяется, но если остановить изменение окна при mouse up функция не будет выполняться (NSImagView вернется в положении до поворота) . Для выполнения функции когда mouse up нужна NSWindow.didUpdateNotification.