2

I've been trying to figure out how to get a NSWindow to perform a transition animation with Swift 3. I found a few examples in Objective-C, but I haven't been able to tease out the relevant details and translate into the target language / newer SDK and get it applied to the right object. This one is pretty flipping cool, but it's ~8yrs old: http://www.theregister.co.uk/2009/08/21/cocoa_graphics_framework/ -- I would imagine there's a better way to do the CGSCube effect now in macOS Sierra with Swift.

Here's what I have so far:

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()
    }
}

This doesn't really do the trick at all. I get a white background on my window instead of a transparent background, and my view rolls across the frame instead of the window frame itself being animated.

Ideally, I would like to do something more advanced like these 3d transitions -- https://cocoapods.org/pods/MKCubeController & https://www.appcoda.com/custom-view-controller-transitions-tutorial/ & https://github.com/andresbrun/ABCustomUINavigationController#cube but I'm not quite sure how to translate the examples from the iOS SDK over to the macOS SDK without UIKit. (Annoyingly, I remember pulling this off a few years back in ObjC, but the project was lost somewhere between formats / new computers.)

How can I apply a transform to the NSWindow itself while segueing between View Controllers? Any tips toward adding some 3d to this effect would be appreciated. I hoping there's maybe a CocoaPod that gets me halfway there.

shallowThought
  • 19,212
  • 9
  • 65
  • 112

0 Answers0