我一直试图弄清楚如何让一个NSWindow用Swift 3执行过渡动画。我在Objective-C中找到了一些例子,但我还没有能够弄清楚相关详细信息并转换为目标语言/更新的SDK并将其应用于正确的对象。这个非常翻转很酷,但它已经过了8年了:http://www.theregister.co.uk/2009/08/21/cocoa_graphics_framework/ - 我认为有更好的方法来做CGSCube
效果现在在macOS Sierra和Swift。
这是我到目前为止所拥有的:
class ViewController: NSViewController {
func doAnimation() {
if let layer = view .layer {
layer.backgroundColor = CGColor.black
let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation")
rotateAnimation.fromValue = 0.0
rotateAnimation.toValue = CGFloat(CGFloat.pi * 2.0)
rotateAnimation.duration = 10.0
layer.add(rotateAnimation, forKey: nil)
}
}
override func viewWillAppear() {
if let window = self.view.window {
window.styleMask = NSWindowStyleMask.borderless
window.backingType = NSBackingStoreType.buffered
window.backgroundColor = NSColor.clear
window.isOpaque = false
window.hasShadow = false
}
}
override func viewDidLoad() {
super.viewDidLoad()
doAnimation()
}
}
这根本不是真正的伎俩。我的窗口上有一个白色背景而不是透明背景,我的视图在框架上滚动而不是窗框本身被动画化。
理想情况下,我想做一些像这些3D过渡更先进的事情 - https://cocoapods.org/pods/MKCubeController& https://www.appcoda.com/custom-view-controller-transitions-tutorial/& https://github.com/andresbrun/ABCustomUINavigationController#cube但我不太确定如何将iOS SDK中的示例转换为没有UIKit的macOS SDK。 (令人讨厌的是,我记得几年前在ObjC中取消了这个,但项目在格式/新计算机之间丢失了。)
如何在视图控制器之间进行转换时如何将转换应用于NSWindow?任何有关为此效果添加一些3D的提示都将受到赞赏。我希望可能有一个CocoaPod让我在那里。