如何显示NSView的阴影?

时间:2015-09-30 06:51:09

标签: macos swift cocoa calayer nsview

我在这里和其他博客中经历了很多线程,但却无法解决这个问题。我在窗口的内容视图中添加了一个子视图。这是故事板 -

enter image description here -

我拖出了customView的插座来查看控制器,这里是视图控制器的代码 -

import Cocoa
import QuartzCore

class ViewController: NSViewController {

    @IBOutlet weak var customView: NSView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.view.wantsLayer = true
        self.customView.wantsLayer = true
        self.customView.layer?.backgroundColor = NSColor.redColor().CGColor
        self.customView.layer?.cornerRadius = 5.0
        self.customView.layer?.shadowOpacity = 1.0
        self.customView.layer?.shadowColor = NSColor.blackColor().CGColor
        self.customView.layer?.shadowOffset = NSMakeSize(0, -3)
        self.customView.layer?.shadowRadius = 20
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }
}

我在我的项目中添加了QuartzCore框架工作 - enter image description here

但阴影没有出现,这里是屏幕截图 - enter image description here

我无法解决看似微不足道的问题。我错过了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:15)

如果我添加以下行,则可以解决问题 -

self.customView.shadow = NSShadow()

最终代码是 -

import Cocoa
import QuartzCore

class ViewController: NSViewController {

    @IBOutlet weak var customView: NSView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.view.wantsLayer = true
        self.view.superview?.wantsLayer = true
        self.customView.wantsLayer = true
        self.customView.shadow = NSShadow()
        self.customView.layer?.backgroundColor = NSColor.redColor().CGColor
        self.customView.layer?.cornerRadius = 5.0
        self.customView.layer?.shadowOpacity = 1.0
        self.customView.layer?.shadowColor = NSColor.greenColor().CGColor
        self.customView.layer?.shadowOffset = NSMakeSize(0, 0)
        self.customView.layer?.shadowRadius = 20
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}

我无法确定问题可能是这里有人会指出它。