因为sketch没有iOS控件的概念 ,没有UILabel, 没有UIImageView, 所以需要自己构建控件
1.我用Group 组来代替控件名, 修改group的名称实现
2.imageView ,label , 都是由两部分组成 , 一个是Rectange外框, 和相对应的内容
3.group可以包含group, 就形成了父子视图的关系
1.获取选中的控件(不分层级结构版本)
什么是不分层级的呢??
就是图片, 标题 , 还有广告 ,以及背景 没有父子视图的关系, 属于同一级别
image.png
function getControls() {
log('-----------' + init.selection.count())
// log('控件数 =======++++++++++++^^^^^^^^^^^ ' + init.selection.count()) // 模板
// openProperty.settingsPanel()
// log('打印:' + options.controls);
for (var i = 0; i < init.selection.count(); i++) {
var layerGroup = init.selection[i]
// log('GroupType ===' + layerGroup)
var layers = layerGroup.layers().objectEnumerator(), layer;
while (layer = layers.nextObject()) {
// log('*******************:' + layer.name())
options.data.controls.push(layer.name().UTF8String());
}
}
// log('arr ==============:' + options.data.controls);
return options.data.controls;
}
就是遍历一下选中选中的Group里面有多少图层
2.获取选中的图层(有上下级关系)
上面的绘制方式局限性太大了 , 毕竟如果涉及到覆盖关系的话, 谁在上面, 谁在下面?所有要有这样的层级关系, 毕竟决定了代码addSubview
的时候谁在上面
function getControls(layerGroup) {
// log('-----------' + init.selection.count())
// log('控件数 =======++++++++++++^^^^^^^^^^^ ' + init.selection.count()) // 模板
// log('GroupType ===' + layerGroup)
var layers = layerGroup.layers().objectEnumerator(), layer;
while (layer = layers.nextObject()) {
// log('*******************:' + layer.name())
// log('-------------:name:' + layer.name() + ' class:' + layer.class());
if (layer.class() == 'MSLayerGroup') {
//添加到一个数组里
options.data.controls.push(layer.name().UTF8String());
getControls(layer)
}
}
return options.data.controls;
// log('arr ==============:' + options.data.controls);
}
用了一个递归 , 这个递归如果写的有问题, 欢迎给改正下, 递归很少用, 总感觉写的不对, 但是结果对就暂时没有管
上一篇 : sketch开发之Json2View(二) 初始化
下一篇:sketch开发之Json2View(四) 创建资源绑定弹框
网友评论