gpt4 book ai didi

swift - nswindow 动画师无法在窗口 Controller 中工作

转载 作者:行者123 更新时间:2023-11-28 12:17:49 31 4
gpt4 key购买 nike

我想制作向右滑动的动画,比如 Siri 窗口。所以在用户点击按钮后,我会:

self.myWindowController.showWindow(nil)

在窗口 Controller 中:

override func windowDidLoad() {
super.windowDidLoad()

if let window = window, let screen = window.screen {
window.makeKeyAndOrderFront(nil)
window.animationBehavior = .none

let offsetFromLeftOfScreen: CGFloat = 30
let offsetFromTopOfScreen: CGFloat = 30
let screenRect = screen.visibleFrame
let newOriginX = screenRect.maxX - window.frame.width - offsetFromLeftOfScreen
let newOriginY = screenRect.maxY - window.frame.height - offsetFromTopOfScreen

DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
NSAnimationContext.beginGrouping()
NSAnimationContext.current().duration = 3.0
window.animator().setFrameOrigin(NSPoint(x: newOriginX, y: newOriginY))
NSAnimationContext.endGrouping()
}

window.titleVisibility = .hidden
}

但是窗口在延迟 1 秒后移动到右上角没有动画。为什么?

最佳答案

我认为使用不同的 API 来重置框架会成功。

尝试做这样的事情:

    let newFrame = CGRect(x: newOriginX, y: newOriginY, width: window.frame.size.width, height: window.frame.size.height)
DispatchQueue.main.asyncAfter(deadline: .now()+1.0) {
NSAnimationContext.runAnimationGroup({ (context) in
context.duration = 3.0

window.animator().setFrame(newFrame, display: true, animate: true)
}, completionHandler: {
print("animation done")
})
}

您也不需要显式设置 animationBehavior 属性,除非您自己绘制。把它拿出来。

关于swift - nswindow 动画师无法在窗口 Controller 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45858561/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com