Я думаю, что проблема в том, что вы используете новый (ish) прокси-сервер аниматора для анимации рамки окна, а также гораздо более старый параметр animate:
NSWindow
setFrame:display:animate:
, который использует старый NSViewAnimation
API.
Эти два метода анимации, вероятно, конфликтуют, поскольку они пытаются анимировать окно одновременно, используя разные пути кода.
Вам также нужно обернуть несколько вызовов на прокси-сервер аниматора в [NSAnimationContext beginGrouping]
и [NSAnimationContext endGrouping]
, если вы хотите, чтобы анимации были одновременными.
Попробуйте сделать это:
[NSAnimationContext beginGrouping];
[_popoverContentView animator] setFrame: newPopoverContentViewFrame];
[[popover animator] setFrame: newPopoverFrame display: YES animate:NO];
[NSAnimationContext endGrouping];
Если это не сработает, вы можете отказаться от использования проблемного метода setFrame:display:animate:
и просто анимировать позицию и размер независимо:
[NSAnimationContext beginGrouping];
[_popoverContentView animator] setFrame: newPopoverContentViewFrame];
[[popover animator] setFrameOrigin: newPopoverFrame.origin];
[[popover animator] setFrameSize: newPopoverFrame.size];
[NSAnimationContext endGrouping];
Группировка контекстов анимации гарантирует, что все происходит одновременно.