美文网首页
sketch开发之Json2View(三) 获取选中控件

sketch开发之Json2View(三) 获取选中控件

作者: 西博尔 | 来源:发表于2019-01-19 21:20 被阅读20次

    sketch工程下载地址:github

    因为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的时候谁在上面

    image.png
    
    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(四) 创建资源绑定弹框

    相关文章

      网友评论

          本文标题:sketch开发之Json2View(三) 获取选中控件

          本文链接:https://www.haomeiwen.com/subject/yvwpdqtx.html