设计师编程指南之Sketch插件开发 8 之Cocoa基础知识

2018-04-17 16:06:34 浏览数 (1)

往期文章索引:

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))

NSIntersectionRect2 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

0 人点赞