目錄
-
入門
-
高級(jí)
Sketch中的插件定義了一個(gè)或多個(gè)命令帝蒿,其中Sketch將顯示菜單項(xiàng)。
這些命令中的每一個(gè)實(shí)際上都是作為一個(gè)JavaScript函數(shù)實(shí)現(xiàn)的(我們稱之為處理程序),位于該包中的腳本文件中钓瞭。
每個(gè)腳本可以包含盡可能多的處理程序,并且每個(gè)命令都可以由不同的處理程序?qū)崿F(xiàn)淫奔,因此山涡,無(wú)論您是按照每個(gè)命令安排一個(gè)腳本,還是將所有命令處理程序放在單個(gè)腳本文件中,都由您決定鸭丛。
因此竞穷,要了解如何制作插件,首先需要了解如何編寫Sketch腳本鳞溉。
教你如何編寫JavaScript代碼超出了這些頁(yè)面的范圍瘾带,所以我們假設(shè)你已經(jīng)知道了這一點(diǎn)。如果沒有熟菲,互聯(lián)網(wǎng)上有很多好的學(xué)習(xí)資源看政!
腳本語(yǔ)法
Sketch中的腳本使用CocoaScript編寫。
這是一個(gè)橋梁抄罕,可讓您編寫可調(diào)用本機(jī)Objective-C / Cocoa的JavaScript腳本允蚣。
使用它,你可以用JavaScript編寫你的插件的邏輯贞绵,但是當(dāng)你想讓它做某事時(shí)厉萝,可以調(diào)用實(shí)現(xiàn)Sketch的實(shí)際類和方法恍飘。
基礎(chǔ)如下:
- 你會(huì)像往常一樣編寫JavaScript代碼
- 使用橋接器榨崩,您可以從主機(jī)應(yīng)用程序(在本例中為Sketch)或從系統(tǒng)本身獲取Objective-C對(duì)象
- 基本的Objective-C對(duì)象具有等同的JavaScript(如字符串和數(shù)字),通痴履福可以以與JS版本相同的方式使用
- 您可以像在JS中一樣讀取和寫入自定義Objective-C對(duì)象的屬性
- 您可以使用熟悉的JavaScript語(yǔ)法或Objective-C方括號(hào)語(yǔ)法來(lái)調(diào)用自定義Objective-C對(duì)象的方法母蛛。
(有關(guān)更多詳細(xì)信息,請(qǐng)參閱更多關(guān)于CocoaScript頁(yè)面乳怎。)
當(dāng)您的腳本被Sketch調(diào)用時(shí)彩郊,您會(huì)傳遞一些上下文,包括表示當(dāng)前Sketch文檔和選擇的Objective-C對(duì)象蚪缀。
然后秫逝,您可以讀取屬性,執(zhí)行計(jì)算并調(diào)用這些對(duì)象的方法询枚,以完成腳本的目的违帆。
腳本上下文
當(dāng)用戶選擇插件菜單命令時(shí),Sketch會(huì)查找要調(diào)用的處理程序(CocoaScript函數(shù))以及調(diào)用它的腳本文件金蜀。
當(dāng)處理程序被調(diào)用時(shí)刷后,它會(huì)傳遞一個(gè)上下文變量。這包含一些重要的屬性渊抄,您可以使用它們?cè)L問(wèn)您需要的對(duì)象尝胆。
例如,selection屬性為您提供當(dāng)前文檔中選定圖層的列表:
var onRun = function(context) {
var selection = context.selection
for (var i = 0; i < selection.count(); i++) {
var layer = selection[i]
log('layer ' + layer.name + ' is selected.')
}
}
Sketch中的所有插件都可以訪問(wèn)以下默認(rèn)變量:
-
command:
MSPluginCommand
表示當(dāng)前正在執(zhí)行的腳本命令的對(duì)象 -
文檔:
MSDocument
代表當(dāng)前文檔的對(duì)象 -
plugin:
MSPluginBundle
表示包含當(dāng)前正在執(zhí)行的腳本的插件包的對(duì)象 -
scriptPath:
NSString
包含當(dāng)前正在執(zhí)行的腳本的完整路徑 - scriptURL:與scriptPath類似护桦,但是作為NSURL對(duì)象
-
選擇
NSArray
當(dāng)前文檔中選擇的一個(gè)或多個(gè)圖層; 這個(gè)數(shù)組中的每一項(xiàng)都是一個(gè)MSLayer
對(duì)象
嘗試腳本
嘗試簡(jiǎn)單腳本的最簡(jiǎn)單方法是通過(guò)插件>自定義插件...菜單項(xiàng)含衔。
這給你一個(gè)文本字段,你可以輸入你的腳本。
點(diǎn)擊運(yùn)行按鈕將執(zhí)行腳本并在下面板顯示任何輸出或錯(cuò)誤抱慌。
您可以使用此界面進(jìn)行探索和實(shí)驗(yàn)逊桦。
創(chuàng)建一個(gè)插件
一旦你有一個(gè)你想要開發(fā)成適當(dāng)?shù)牟寮哪_本,你可以使用Run Custom Script ...表單中的Save ...按鈕抑进。
這將創(chuàng)建一個(gè)Plugin文件夾(稱為Plugin Bundle)并將腳本保存到其中强经。
生成的插件將具有單個(gè)命令和單個(gè)腳本文件。執(zhí)行該命令將調(diào)用onRun
腳本中的函數(shù)寺渗,該函數(shù)將包含您輸入的代碼匿情。
從這個(gè)起點(diǎn)開始,您可以通過(guò)直接編輯文件夾中的文件來(lái)擴(kuò)展您的插件信殊。
你可以添加更多的代碼到你的onRun
函數(shù)炬称,添加更多的功能,甚至更多的腳本文件涡拘。
通過(guò)編輯manifest.json
插件文件夾中的文件玲躯,您可以自定義命令的名稱,輸入描述鳄乏,甚至可以展開插件以定義多個(gè)命令跷车。
有關(guān)更多信息,請(qǐng)參閱插件包橱野。