[sketch plugin]如何写一个可交互的webView界面(一)

作为一个不熟悉object-c的UI开发,原本以为有了cocoascript就完事大吉,然而在用oc写sketch插件界面的时候还是稍有吃力的。于是就研究下如何写一个webView的界面,并让webView和sketch间交互。

新建一个窗口

首先我们用AppKit的API写一个窗口

//窗口宽高
var panelWidth = 280; 
var panelHeight = 240;

// 新建一个panel
var panel = NSPanel.alloc().init();
//根据给定的矩形框设置窗口框架矩形的原点和大小,从而在屏幕上设置其位置和大小
panel.setFrame_display(NSMakeRect(0, 0, panelWidth, panelHeight), true);
  
panel.setStyleMask(NSTexturedBackgroundWindowMask | NSTitledWindowMask | NSClosableWindowMask | NSFullSizeContentViewWindowMask);
//设置panel背景色
panel.setBackgroundColor(NSColor.whiteColor());

// 设置title bar
panel.title = "";
panel.titlebarAppearsTransparent = true;

// 使panel居中并focus panel
panel.center();
panel.makeKeyAndOrderFront(null);
panel.setLevel(NSFloatingWindowLevel);

// Make the plugin's code stick around (since it's a floating panel)
COScript.currentCOScript().setShouldKeepAround_(true);

// 隐藏panel的最小化及最大化按钮
  panel.standardWindowButton(NSWindowMiniaturizeButton).setHidden(true);
  panel.standardWindowButton(NSWindowZoomButton).setHidden(true);

// 设置一个模糊背景阴影
var vibrancy = NSVisualEffectView.alloc().initWithFrame(NSMakeRect(0, 0, panelWidth, panelHeight));
  vibrancy.setAppearance(NSAppearance.appearanceNamed(NSAppearanceNameVibrantLight));
  vibrancy.setBlendingMode(NSVisualEffectBlendingModeBehindWindow);

由此,我们就获得了这样一个空白的窗口

在窗口中创建一个webView

在写 JavaScript 的时候,可以使用一个叫做 window 的对象,在Objective-C 中,我们可以拿到这个出现在 JavaScript 中的 window 对象,也就是 [webView windowScriptObject]。这个对象就是 WebView 的JS 与OC(在我们这里是sketch)间的桥梁。在cocoascript就是这样写

// 在panel中新建一个webView
var webView = WebView.alloc().initWithFrame(NSMakeRect(0, 0, panelWidth, panelHeight - 44));
// 获取webView的url,也就是我们事先写好的一个界面
var request = NSURLRequest.requestWithURL(context.plugin.urlForResourceNamed("panel.html"));
webView.mainFrame().loadRequest(request);//加载webView
webView.setDrawsBackground(false);

// 获取webView里的window对象
var windowObject = webView.windowScriptObject();

webView界面的代码

//css
.container{
  padding: 10px;
}
.value{
  width: 100%;
  height: 100%;
  background-color: #272822;
  color: #fff;
}
.text{
  padding: 10px;
  font-family: Consolas,"Liberation Mono",Menlo,Courier,monospace;
}
//HTML
<div class="container">
    <div class="value">
        <p class="text" id="textCSS">CSS</p>
    </div>
</div>

接着我们把这个webView加到窗口中

// 把这个webView加到窗口中
panel.contentView().addSubview(webView);

如此就获得了我们想要的界面,是不是棒棒的?
在下一篇文章里我们将讲解如何使这个webView和OC间交互。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • WebView简介 String getUrl():获取当前页面的URL。 reload():重新reload当前...
    QM阅读 3,210评论 0 52
  • Tips 由于WebView的用法实在太多,如果您只是想查询某个功能的使用——建议Ctrl+F(Commad+F)...
    BugDev阅读 7,807评论 11 109
  • 太简单的基础就不罗嗦。。。1:App内打开网页 2:方法简介(1)、String webView.getUr...
    大校啊阅读 492评论 0 1
  • 01 我怀念的是无话不说。//我怀念的是一起做梦。//我怀念的是争吵以后,//还是想要爱你的冲动。//我怀念的是无...
    充满烟火气的女王阅读 703评论 2 1