美文网首页链式编程
Masonry的链式编成思想

Masonry的链式编成思想

作者: Sniper_Zheng | 来源:发表于2016-07-26 18:02 被阅读35次

Masonry的链式编成思想

mas_makeConstraints 给控件设置布局

参数是一个block
返回值是一个NSArray

- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
    self.translatesAutoresizingMaskIntoConstraints = NO;
    MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
    block(constraintMaker);
    return [constraintMaker install];
}

个人理解: 拿我特别喜欢吃的木屋烧烤举例子.

1.创建一个约束制造者

  • 拿下菜单.

2.调用block(maker) 让外界把约束加好

  • 把点菜那个单给顾客, 想吃啥自己往上面写.

3.[constraintMaker install]; 遍历约束制造者的所有约束并返回.

  • 上菜给顾客
  • install是老板烤串,把串烤好在return

MASConstraintMaker 约束制造者类 (点菜单) 在Masonry里也封装了些添加约束的方法. 通过链式编成思想,使得添加约束简单明了.

  • 点菜时候各种菜名很复杂,或许有不认识的字,所以顾客点菜时候不用写菜的全名,只要把相应的编号写上去就好 比如想点3L的朝日啤酒 就写2310.
另外关于链式编成思想.我以Masonry的源码为基础 写了一个简单的图文混排,以便更好的理解链式编成思想.
- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *str = @"Sniper";
    NSMutableAttributedString *waterStr = [str makeString:^(ZNStringMaker *maker) {
        maker.addStr(@" is").addStr(@" a").addStr(@" Developer ").addImgName(@"water").addStr(@" yo~!");
    }];
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 50, 240, 40)];
    [self.view addSubview:label];
    label.attributedText = waterStr;
    label.backgroundColor = [UIColor orangeColor];
}

结果:

屏幕快照 2016-07-26 下午5.53.18.png

代码:

#import <Foundation/Foundation.h>
#import "ZNStringMaker.h"

@interface NSString (ZNAdd)

- (NSMutableAttributedString *)makeString:(void (^)(ZNStringMaker *maker))block;

@end
#import "NSString+ZNAdd.h"

@implementation NSString (ZNAdd)

- (NSMutableAttributedString *)makeString:(void (^)(ZNStringMaker *maker))block; {
    ZNStringMaker *maker = [[ZNStringMaker alloc] initWithStr:self];
    block(maker);
    return [maker makeAttrStr];
}

@end

#import <Foundation/Foundation.h>

@interface ZNStringMaker : NSObject

- (ZNStringMaker * (^)(NSString *str))addStr;
- (ZNStringMaker * (^)(NSString *imgNameStr))addImgName;

- (instancetype)initWithStr:(NSString *)str;

- (NSMutableAttributedString *)makeAttrStr;

@end
#import "ZNStringMaker.h"
#import <UIKit/UIKit.h>

@interface ZNStringMaker ()

@property (nonatomic, copy)NSMutableString *strResult;
@property (nonatomic, copy)NSMutableAttributedString *attrStrResult;

@end

@implementation ZNStringMaker

- (ZNStringMaker * (^)(NSString *str))addStr {
    return ^(NSString *str) {
        if (str) {
            if (_attrStrResult) {
                NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:str];
                [_attrStrResult appendAttributedString:attrStr];
            } else {
                [_strResult appendString:str];
            }
        }
        return self;
    };
}

-(ZNStringMaker *(^)(NSString *))addImgName {
    return ^(NSString *str) {
        if (str) {
            NSTextAttachment *textAttach = [[NSTextAttachment alloc] init];
            NSString *imgName = str;
            textAttach.image = [UIImage imageNamed:imgName];
            NSAttributedString *attrImg = [NSAttributedString attributedStringWithAttachment:textAttach];
            
            _attrStrResult = [[NSMutableAttributedString alloc] initWithString:_strResult];
            [_attrStrResult appendAttributedString:attrImg];

        }
        return self;
    };

}

- (instancetype)initWithStr:(NSString *)str {
    self = [super init];
    if (self) {
        _strResult = [[NSMutableString alloc] initWithString:str];
    }
    
    return self;
}

- (NSMutableAttributedString *)makeAttrStr {
    return _attrStrResult;
}

@end

相关文章

  • Masonry的链式编成思想

    Masonry的链式编成思想 mas_makeConstraints 给控件设置布局 参数是一个block返回值是...

  • 一、链式编程思想、响应式编程思想和函数式编程

    1. 链式编程思想 链式编程思想的核心就是方法的返回值必须是Block,Masonry是链式编程思想应用的代表。 ...

  • 关于链式编程的理解:常看牢记

    模拟Masonry的链式编程,形式如: 思想(简单理解):

  • 链式编程

    最近有时间看了下Masonry的实现原理,大家都知道Masonry就是经典的链式编程思想 链式编程小练习 1.创建...

  • 简单的链式编程(iOS)

    1.链式编程思想 最初接触Masonry框架的时候还不知道什么链式编程,最初的感觉就是Masonry使用起来很简洁...

  • 编程思想-链式编程

    编程思想-链式编程 链式编程(链式调用)的主要表现是支持点语法结构的代码,代表库可以参照 Masonry 或 Sn...

  • iOS链式编程

    前言 通过对Masonry的学习,我们了解了链式编程的思想。此片文章是使用链式编程的思想做一个计算机,练习一下链式...

  • RAC之masonry源码深度解析

    写在前面:本文不是讲解masonry的基础使用,而是希望借着masonry的源码解析给大家渗透链式编程的思想和展示...

  • 编程方式

    链式编程思想:将多个操作通过(.)链接在一起,返回值是block来实现.如masonry. masonry 响应式...

  • 链式编程思想和响应式编程思想的学习总结

    1.链式编程思想的代表:Masonry框架 主要的特点:链式编程是将多个操作(多行代码)通过点号(.)链接在一起成...

网友评论

    本文标题:Masonry的链式编成思想

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