设计师编程指南之Sketch插件开发 8 之Cocoa基础知识
往期文章索引:
1 / 入门基本概念、page的相关操作
2 / artboard 、NSFileManager 和 NSString 关于文件及文件夹的相关操作
5/ Shape 的一些操作,主要介绍 line 及 rect
7/ GUI
Cocoa 提供了自己的数据结构来操作基本的几何信息,如点和矩形。包括如下:
NSPoint、NSSize、NSRect
01
NSPoint 点数据类型由一个 x 和 y 值组成。例如,用点来定义直线,指定矩形的起点,指定弧的角度等等。
有 2 种方法可以定义 NSPoint:
var p1=NSMakePoint(1,2);log(p1)
var p2=NSPointFromString('{20,30}');
log(p2)
打印出来看下
CGPoint { x = 1, y = 2
}
CGPoint {
x = 20,
y = 30
}
NSPoint 其实就是 CGPoint 。
02
NSSize 大小数据类型由 width 和 height
组成。例如,指定矩形或椭圆的宽度和高度。
log(NSMakeSize(200,100))
log(NSSizeFromString('{100,2}'))
打印出来是:
CGSize { width = 200, height = 100
}CGSize { width = 100, height = 2
}
03
NSRect 矩形数据类型是由原点和大小组成的复合结构。该 size 字段指定相对于原点的矩形高度和宽度。
var rect=NSMakeRect(0,0,12,12);log(rect)
var rect2=NSRectFromString('{20,10,330,90}');log(rect2)
结果:
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:
var rect=NSMakeRect(30,30,12,12);
var rect2=NSRectFromString('{20,10,330,90}');log(NSContainsRect(rect2,rect))
NSIntegralRect 取整 NSRect
var rect=NSMakeRect(30,30.2,12.12,12.89);log(NSIntegralRect(rect))
NSIntersectionRect 求 2 个 NSRect 的交集
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