美文网首页
iOS开发中使用链式编程创建UIButton

iOS开发中使用链式编程创建UIButton

作者: 米米0311 | 来源:发表于2017-05-02 19:23 被阅读0次

    具体的代码参见 https://github.com/yanjie311/Chain-coding---primary

    链式编程

    对于有一定开发经验的人来说链式编程并不陌生,有很多知名的开源库都是采用的这种编程方式,在iOS库中,Masory和Snapkit也是典型的使用链式编程的例子。
    大体来说,链式编程就是将多个操作(多行代码)通过某种操作符(通常是点号.)链接成一句的代码.便代码更加紧凑,可读性也更好,降低了代码的重复度.比如以下代码:

    //普通方法实现
        [sender setImage:[UIImage imageNamed:@"newcreate_click.png"] forState:UIControlStateNormal];
        sender.imageView.contentMode = UIViewContentModeScaleAspectFit;
        [sender setTitle:@"你好" forState:UIControlStateNormal];
        [sender setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
        sender.titleLabel.textAlignment = NSTextAlignmentCenter;
        [self.view addSubview:sender];
        //链式结构实现
        sender1.ImagePrams(@"newcreate_click.png",1)
        .TitlePrams(@"你好", 17, [UIColor grayColor], 1)
        .ClickAction(sender1);
        [self.view addSubview:sender1];
    

    通过这个例子读者应该可以更清楚的了解什么是链式编程风格.简单来说,链式编程风格要有以下特点:

    • 通常是都是调用一个函数来给属性赋值.也就是说,该函数封装了赋值的语句,还可以在里面加入自己的判断和一些逻辑.
    • 该函数必须有一个返回值,通常是它本身.也可以是处理后的数据或者对象.
    • 可以用静态函数作为起始函数,但是后面的全是实例函数.
    • 可以设定一个最终函数,该函数不返回任何对象,用它来完成最后所有操作.

    链式编程的利弊

    使用链式编程最主要的好处是可以使代码更简洁,写起来一种"爽快"感.设计优秀的链式编程可以大大降低重复的代码,增强逻辑感.不足之处就是对开
    发者的业务逻辑能力要求较高,同时因为链式编程都是调用函数,所以有可能会造成过深的函数调用栈.稍微影响性能.

    创建按钮

     WYJLinkerButton* sender1 = [WYJLinkerButton creatButton:CGRectMake(100, 100, 100, 100)];
        sender1.ImageEdgInsets(20,0,60,60)
        .TitleEdgInsets(0,63,100,23)
        .ImagePrams(@"newcreate_click.png",1)
        .TitlePrams(@"你好", 17, [UIColor grayColor], 1)
        .ClickAction(sender1);
        [self.view addSubview:sender1];
    
        WYJLinkerButton* sender2 = [WYJLinkerButton creatButton:CGRectMake(100, 200, 100, 100)];
        sender2.backgroundColor = [UIColor blueColor];    sender2.ImageEdgInsets(0,25,40,40).TitleEdgInsets(45,32,55,25).ImagePrams(@"newcreate_click.png",1).TitlePrams(@"不开心!",16,[UIColor redColor], 1).ClickAction(sender2);
        sender2.jmImagev.layer.cornerRadius = 10;
        sender2.jmImagev.layer.masksToBounds = YES;
        [self.view addSubview:sender2];
    
        WYJLinkerButton* sender3 = [WYJLinkerButton creatButton:CGRectMake(120, 300, 80, 30)];
        sender3.ImageEdgInsets(0,2.5,25,25)
        .TitleEdgInsets(27,2.5,55,25)
        .ImagePrams(@"newcreate_click.png",1)
        .TitlePrams(@"发微博",16,[UIColor blueColor], 1)
        .ClickAction(sender3);
        [self.view addSubview:sender3];
    

    简单举例(给按钮添加label)

    • .h文件中的属性写法
    ** Title的参数值,“(title, fountSize, textColor)” */
    @property(nonatomic,copy)
    WYJLinkerButton* (^TitlePrams)(NSString* title,NSInteger fountSize,UIColor*textColor, NSTextAlignment textAlignment);
    
    • .m文件中的实现
    - (WYJLinkerButton *(^)(NSString *, NSInteger, UIColor *, NSTextAlignment))TitlePrams {
        return ^WYJLinkerButton* (NSString* title,NSInteger fountSize,UIColor*textColor, NSTextAlignment textAlignment){
            self.jmLabel.text = title;
            self.jmLabel.textColor = textColor;
            self.jmLabel.font = [UIFont systemFontOfSize:fountSize];
            self.jmLabel.textAlignment = textAlignment;
            return self;
        };
    }
    

    github上有具体的代码参考,欢迎大家批评指正,谢谢

    相关文章

      网友评论

          本文标题:iOS开发中使用链式编程创建UIButton

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