如果我在paint code I中创建一个对象,则会得到一个样式表或标签部分的代码。
样式表:
import Cocoa
public class StyleKitName : NSObject {
//// Drawing Methods
public class func drawMain() {
//// Color Declarations
let color = NSColor(calibratedRed: 1, green: 0, blue: 0, alpha: 1)
//// Rectangle Drawing
let rectanglePath = NSBezierPath(rect: NSMakeRect(29, 30, 198, 166))
color.setFill()
rectanglePath.fill()
}
}
代码来自tab:
//// Color Declarations
let color = NSColor(calibratedRed: 1, green: 0, blue: 0, alpha: 1)
//// Rectangle Drawing
let rectanglePath = NSBezierPath(rect: NSMakeRect(29, 30, 198, 166))
color.setFill()
rectanglePath.fill()
我如何将它导入到我的swift项目中呢?我试过把样式表放在一个单独的.swift
文件中,然后在NSViewController
中调用我的viewDidLoad
函数的函数:var rectangle = StyleKitName.drawMain()
,但NSView上没有出现任何东西。我还尝试将代码从选项卡直接粘贴到视图控制器的视图确实加载,但视图控制器上没有出现任何东西。
有人知道我做错了什么吗?
关于创建自定义视图,您有点迷失在森林中。
1) StyleKitName必须继承NSView
。阅读NSView类参考
2)定义一个自定义视图如何描绘自己,你必须重写drawRect()
,而不是定义你自己的函数。
3)要使一个视图绘制自己,你不能直接调用drawRect()
,而是调用setNeedsDisplayInRect()
https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/index.html//apple_ref/occ instm/NSView/setNeedsDisplayInRect:
4) viewDidLoad()不是ViewController生命周期中调用绘图函数的合适位置。如果你在主视图中使用viewDidLoad()
中的addSubView()
来布局你的自定义视图,你将不需要启动任何绘图请求。你应该在加载时进行布局,定义在编译时如何绘制视图,并让OS X决定何时在运行时重新绘制。
见:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/SubclassingNSView/SubclassingNSView.html