slc*_*ott 19 nsview xcode-storyboard swift
使用osx的故事板绘制到NSView的过程是什么?我已经在NSViewController中添加了一个NSView.然后,我添加了一些约束和插座.

接下来,我添加了一些代码来改变颜色:import Cocoa
class ViewController: NSViewController {
@IBOutlet var box: NSView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear() {
box.layer?.backgroundColor = NSColor.blueColor().CGColor
//box.layer?.setNeedsDisplay()
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想做自定义绘图和更改NSView的颜色.我过去在iOS上进行过复杂的绘图,但我完全陷入困境.有谁看到我做错了什么?
小智 32
正确的方法是
class ViewController: NSViewController {
@IBOutlet var box: NSView!
override func viewDidLoad() {
super.viewDidLoad()
self.view.wantsLayer = true
}
override func viewWillAppear() {
box.layer?.backgroundColor = NSColor.blue.cgColor
//box.layer?.setNeedsDisplay()
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}}
Run Code Online (Sandbox Code Playgroud)
Cry*_*ppo 31
斯威夫特通过财产
extension NSView {
var backgroundColor: NSColor? {
get {
if let colorRef = self.layer?.backgroundColor {
return NSColor(CGColor: colorRef)
} else {
return nil
}
}
set {
self.wantsLayer = true
self.layer?.backgroundColor = newValue?.CGColor
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
yourView.backgroundColor = NSColor.greenColor()
Run Code Online (Sandbox Code Playgroud)
其中yourView是NSView或其任何子类
extension NSView {
var backgroundColor: NSColor? {
get {
if let colorRef = self.layer?.backgroundColor {
return NSColor(cgColor: colorRef)
} else {
return nil
}
}
set {
self.wantsLayer = true
self.layer?.backgroundColor = newValue?.cgColor
}
}
}
Run Code Online (Sandbox Code Playgroud)
Leo*_*bus 12
Swift 3.0或更高版本
import Cocoa
@IBDesignable class ColoredView: NSView {
@IBInspectable var backgroundColor: NSColor = .clear
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
backgroundColor.set()
dirtyRect.fill()
}
}
Run Code Online (Sandbox Code Playgroud)
这效果更好:
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
NSColor.blueColor().setFill()
NSRectFill(dirtyRect);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22009 次 |
| 最近记录: |