iOS链式创建UI终结者 ➜ PPMaker

作者: PPAbner | 来源:发表于2018-05-09 17:51 被阅读990次

    声明:PPMakerMasonry功能上是完全不同的库,PPMaker是快速便捷创建UI/attributedText等的,而Masonry是布局的。

    做iOS开发,创建UI控件,必须的不说,还多,尤其你新入手一个项目。

    我自己写代码,向来想省事:怎么能不一个一个属性写?带着这个问题,我刚开始创建了各种Tool来处理,后来用Category证据在此),可Category有个烦人的问题:有些属性我不需要但是方法参数有,而有些属性我需要方法参数没有

    昨天,看到臧成威如何利用Objective-C写一个精美的DSL,唉,挺好,就想着优化下自己的,于是就有了 PPMaker.

    在此,献上对臧老师的感谢。

    PPMaker的不同(优点)

    ➊ 链式调用,代码简洁;

    特别字符统一处理

    ➋ 点语法后面有提示(Masonry是没有的 )

    PPMaker有提示 Masonry没提示

    ➌ 不需要终结词 臧老师给的示例有

    ➍ 不需要助词 如Masonry中的with,这个也可以说是一个缺点吧;

    ➎ pod可根据需求随意选择。

    模块可独立使用
    ➏ 不需要的属性,根本不用管 主要对比Category;

    PPMaker的用法

    第一步、导入PPMaker

    方法一、使用CocoaPods安装

    pod 'PPMaker', '~> 0.0.22'

    方法二、手动下载拖入

    第二步、用对应的类如:UILable直接调用pp_

    easyToUse_lb easyToUse_imgV

    如下创建一个简单的UILabel对象:


    Snip20180509_10.png

    maker调用,直接调UILabel对象的属性,如texttextColorframe等,当然也有自定义的,如intoView表示要加到哪个view上、fontSize实际上[UIFont systemFontOfSize:fontSize]的简化等等。

    总之,PPMaker is very easy to use.

    创建UI控件的路程

    起初:一个属性一个属性赋值

        UILabel *lb = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 300, 50)];
        [self.view addSubview:lb];
        lb.backgroundColor = [UIColor whiteColor];
        lb.text = @"我是一个lb";
        lb.textColor = [UIColor blueColor];
        lb.textAlignment = NSTextAlignmentCenter;
        lb.font = [UIFont systemFontOfSize:18];
    

    后来:用Category快速创建

    @interface UILabel (EasyMake)
    +(UILabel *)lbMakeWithSuperV:(UIView *)superV
                           frame:(CGRect)frame
                            font:(UIFont *)font
                       alignment:(NSTextAlignment)alignment
                            text:(NSString *)text
                       textColor:(UIColor *)textColor;
    
    @implementation UILabel (EasyMake)
    +(UILabel *)lbMakeWithSuperV:(UIView *)superV
                           frame:(CGRect)frame
                            font:(UIFont *)font
                       alignment:(NSTextAlignment)alignment
                            text:(NSString *)text
                       textColor:(UIColor *)textColor
    {
        UILabel *lb = [[UILabel alloc]init];
        if (superV) {
            [superV addSubview:lb];
        }
        if (font) {
            lb.font = font;
        }
        if (text) {
            lb.text = text;
        }
        if (textColor) {
            lb.textColor = textColor;
        }
        lb.frame = frame;
        lb.textAlignment = alignment;
        return lb;
    }
    @end
    

    现在:链式调用的 DSL

    Snip20180509_11.png Snip20180509_13.png Snip20180509_14.png Snip20180509_15.png

    结语

    PPMaker是自己写的最满意的一个库,解决了自己一直以来创建UI配置attributedText的苦恼,这其中也参考了一些大神的的blog和开源库,在此,再次表示感谢。今天,分享自己的这个库,希望帮助像我一样的同学,其次,希望觉得好的,给个star.

    当然了,这个库,我会持续更新的,有什么问题,欢迎提出来。或者谁有更好的做法,热烈欢迎告知一下,深表谢意!

    相关文章

      网友评论

      • 喵喵粉:从GitHub拉的代码 在PPMake.m

        -(PPMake *(^)(UIViewContentMode))contentMode
        {
        return ^PPMake *(UIViewContentMode cm){
        self.creatingV.contentMode = condense;
        return self;
        };
        }

        //
        self.creatingV.contentMode = condense;//是=cm吧
        PPAbner:@喵喵粉 哦哦,谢谢指出,我等会看下!
      • iLeooooo:眼前一亮的感觉,这个代码码起来不难,主要是能想到这么做,是很棒的,找时间自己也写个这样的,自己用自己的心里还是踏实一些,不过git上还是star了哈。
        iLeooooo:@PPAbner 确实是很不错的想法
        PPAbner:@i_dLuffy 谢谢认可
        PPAbner:@i_dLuffy 恩恩,可以!主要就是为了开发方便嘛
      • 子达如何:参考了什么大神的库,应该要列出来,并表示感谢:)
      • 倒骑毛驴看风月:比方说:创建uilabel,必须传入宽高,而ma则不需要,会根据文字自适应的,这个也没有的
        和sdautolayout相比,有哪些不同呢?
      • YxYYxY:Swift中then的效果,oc里确实没见过这样的,赞一个!
      • Pufus:下载demo,无法运行,Failed to load project at '......../PPMakerExample.xcodeproj', incompatible project version.
        PPAbner:@无处追寻的梦 给你信息?
        Pufus:@PPAbner 修复好了,麻烦给我信息,我要跑一下demo,向大神学习
        PPAbner:@无处追寻的梦 靠,我一回试一下,不好意思。:smile:
      • 乐视薯片:厉害厉害,有时间看看
        PPAbner:@初心_媛 :smile:还好吧,继续优化中。
      • 安妮爱吃糖love:卤煮,pod 搜不到,“pod search PPMaker
        [!] Unable to find a pod with name, author, summary, or description matching `PPMaker`
        安妮爱吃糖love:@PPAbner 我最开始以为是pods 版本的问题,执行了更新操作,再看看版本是
        pod --version
        1.5.0,应该和这个没关系吧。
        :smile:
        安妮爱吃糖love:@PPAbner 有点意思,是姿势不对么 :sweat:
        我 pod search Masonry都可以找到,再执行
        rm ~/Library/Caches/CocoaPods/search_index.json
        pod search PPMaker
        Creating search index for spec repo 'master'.. Done!
        [!] Unable to find a pod with name, author, summary, or description matching `PPMaker`
        还是找不到,尴尬!
        PPAbner:打开~/Library/Caches/CocoaPods,删除search_index.json,该文件会在重新搜索时创建。或 执行 pod search PPkit --simple 试一试。

      本文标题:iOS链式创建UI终结者 ➜ PPMaker

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