简体   繁体   English

CAEmitterLayer 在带有 Swift 的 MacOS 中不起作用

[英]CAEmitterLayer doesn't work in MacOS with Swift

I just simply create a storyboard program, and change the main ViewController code to the code below which works well in others' example.我只是简单地创建了一个 storyboard 程序,并将主 ViewController 代码更改为下面的代码,这在其他人的示例中运行良好。 but it appears nothing on the view?但它在视图上似乎什么都没有? seeking help.寻求帮助。

What I did:我做了什么:

  1. create an project with storyboard, and I got 'AppDelegate.swift' and 'ViewController.swift'用 storyboard 创建一个项目,我得到了“AppDelegate.swift”和“ViewController.swift”

  2. paste 'Ball_green.png' to my project and see it under the file tree of my project.将“Ball_green.png”粘贴到我的项目中,然后在我的项目的文件树下查看它。

  3. paste the code below in 'ViewController.swift'将下面的代码粘贴到“ViewController.swift”中

import Cocoa

class ViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
        self.view.wantsLayer = true
        self.addLayer()
    }
    
    func addLayer(){
        let rootLayer = self.view.layer
        let snowEmitter = CAEmitterLayer()
        snowEmitter.drawsAsynchronously = true
        snowEmitter.name = "snowEmitter"
        snowEmitter.zPosition = 10.0
        snowEmitter.emitterPosition = CGPoint(x: 0, y: 0)
        snowEmitter.renderMode = CAEmitterLayerRenderMode.backToFront
        snowEmitter.emitterShape = CAEmitterLayerEmitterShape.circle
        snowEmitter.emitterZPosition = -43.00
        snowEmitter.emitterSize = CGSize(width: 160, height: 160)
        snowEmitter.velocity = 20.57
        snowEmitter.emitterMode = CAEmitterLayerEmitterMode.points
        snowEmitter.birthRate = 10
        let snowFlakesCell2 = CAEmitterCell()
        snowFlakesCell2.emissionRange = .pi
        snowFlakesCell2.lifetime = 10.0
        snowFlakesCell2.birthRate = 4.0
        snowFlakesCell2.velocity = 2.0
        snowFlakesCell2.velocityRange = 100.0
        snowFlakesCell2.yAcceleration = 300.0
        snowFlakesCell2.contents = NSImage(named: "Ball_green.png")!.cgImage
        snowFlakesCell2.magnificationFilter = convertFromCALayerContentsFilter(CALayerContentsFilter.nearest)
        snowFlakesCell2.scale = 0.72
        snowFlakesCell2.scaleRange = 0.14
        snowFlakesCell2.spin = 0.38
        snowFlakesCell2.spinRange = 0
        snowEmitter.emitterCells = [snowFlakesCell2]
        rootLayer!.addSublayer(snowEmitter)
    }
}

fileprivate func convertFromCALayerContentsFilter(_ input: CALayerContentsFilter) -> String {
    return input.rawValue
}
extension NSImage {
    var cgImage: CGImage {
        get {
            let imageData = self.tiffRepresentation
            let source = CGImageSourceCreateWithData(imageData as! CFData, nil)
            let maskRef = CGImageSourceCreateImageAtIndex(source!, 0, nil)
            return maskRef!
        }
    }
}

I've solved the problem after adding the code.添加代码后我已经解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM