用于View Controller Segues的NSWindow过渡动画

时间:2017-01-19 05:58:26

标签: swift swift3 nswindow macos-sierra nsviewcontroller

我一直试图弄清楚如何让一个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让我在那里。

0 个答案:

没有答案