往期文章索引:
1 / 入门基本概念、page的相关操作
2 / artboard 、NSFileManager 和 NSString 关于文件及文件夹的相关操作
3 / DIY一个Sketch插件,生成猫猫狗狗的全家福
4 / NSPasteboard 、text 的操作
5/ Shape 的一些操作,主要介绍 line 及 rect
6/ Shape的curve操作
7/ GUI
Cocoa 提供了自己的数据结构来操作基本的几何信息,如点和矩形。包括如下:
NSPoint、NSSize、NSRect
01
NSPoint 点数据类型由一个 x 和 y 值组成。例如,用点来定义直线,指定矩形的起点,指定弧的角度等等。
有 2 种方法可以定义 NSPoint:
代码语言:javascript复制var p1=NSMakePoint(1,2);
log(p1)
var p2=NSPointFromString('{20,30}');
log(p2)
打印出来看下
代码语言:javascript复制CGPoint {
x = 1,
y = 2
}
CGPoint {
x = 20,
y = 30
}
NSPoint 其实就是 CGPoint 。
02
NSSize 大小数据类型由 width 和 height 组成。例如,指定矩形或椭圆的宽度和高度。
代码语言:javascript复制log(NSMakeSize(200,100))
log(NSSizeFromString('{100,2}'))
打印出来是:
代码语言:javascript复制CGSize {
width = 200,
height = 100
}
CGSize {
width = 100,
height = 2
}
03
NSRect 矩形数据类型是由原点和大小组成的复合结构。该 size 字段指定相对于原点的矩形高度和宽度。
代码语言:javascript复制var rect=NSMakeRect(0,0,12,12);
log(rect)
var rect2=NSRectFromString('{20,10,330,90}');
log(rect2)
结果:
代码语言:javascript复制CGRect {
origin = CGPoint {
x = 0,
y = 0
},
size = CGSize {
width = 12,
height = 12
}
}
CGRect {
origin = CGPoint {
x = 20,
y = 10
},
size = CGSize {
width = 330,
height = 90
}
}
NSRect 有几个方法蛮有用的:
NSContainsRect 判断一个 NSRect 是否包含另一个 NSRect:
代码语言:javascript复制var rect=NSMakeRect(30,30,12,12);
var rect2=NSRectFromString('{20,10,330,90}');
log(NSContainsRect(rect2,rect))
NSIntegralRect 取整 NSRect
代码语言:javascript复制var rect=NSMakeRect(30,30.2,12.12,12.89);
log(NSIntegralRect(rect))
NSIntersectionRect 求 2 个 NSRect 的交集
代码语言:javascript复制var rect=NSMakeRect(10,30,103,25);
log(rect)
var rect2=NSRectFromString('{20,10,330,90}');
log(rect2)
log(NSIntersectionRect(rect2,rect))
如下图所示:
NSOffsetRect 偏移 NSRect ,有兴趣自己做下实验。
04
路径
NSBezierPath
创建复杂形状,在 Cocoa 中是唯一可用的方法。这一部分主要有 moveToPoint 、lineToPoint 、curveToPoint controlPoint1 controlPoint2 ( 贝塞尔三次曲线 ) 、 closePath 。详细的使用可以参看往期指南:
Shape 的一些操作,主要介绍 line 及 rect
Shape的curve操作
更多可以查看:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CocoaDrawingGuide/Introduction/Introduction.html