"天下武功,無(wú)快不破",求上天眷顧,愿各位技術(shù)大神來(lái)打通我的任督二脈,從此啟動(dòng)開(kāi)掛模式,在技術(shù)進(jìn)階之路上狂奔.
最近項(xiàng)目開(kāi)發(fā)中用到了Masonry框架
Masonry是一個(gè)輕量級(jí)的布局框架,擁有自己的描述語(yǔ)法,采用更優(yōu)雅的鏈?zhǔn)秸Z(yǔ)法封裝自動(dòng)布局 ,簡(jiǎn)潔明了,并具有高可讀性,而且同時(shí)支持 iOS 和 Max OS X。
我們先來(lái)看一段官方的sample code來(lái)認(rèn)識(shí)一下Masonry
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
相信各位大神早就熟知Masonry 這個(gè)開(kāi)源框架,它主要采用鏈?zhǔn)骄幊趟枷?
鏈?zhǔn)骄幊趟枷耄菏菍⒍鄠€(gè)操作(多行代碼)通過(guò)點(diǎn)號(hào)(.)鏈接在一起成為一句代碼,使代碼可讀性好。a(1).b(2).c(3)
鏈?zhǔn)骄幊烫攸c(diǎn):方法的返回值是block,block必須有返回值(本身對(duì)象)板熊,block參數(shù)(需要操作的值)
讓我們來(lái)思考以下代碼示例:
UIView *redView = [UIView new];
redView.X(100).Y(20).Width(50).Height(100);
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];
UIView *blueView = [UIView new];
blueView.Center(CGPointMake(150, 300)).Size(CGSizeMake(100, 50));
blueView.backgroundColor = [UIColor blueColor];
[self.view addSubview:blueView];
大家有沒(méi)有對(duì)以上代碼布局感到奇怪,和我們通常的 frame 布局有所出入,請(qǐng)繼續(xù)向下瀏覽
按照鏈?zhǔn)骄幊趟枷?本人對(duì) UIVIew+Frame 這個(gè)布局分類做了簡(jiǎn)單擴(kuò)展.
源碼下載
UIView+Frame.h 頭文件
#import <UIKit/UIKit.h>
@interface UIView (Frame)
- (UIView* (^)(CGFloat))X;
- (UIView* (^)(CGFloat))Y;
- (UIView* (^)(CGFloat))Width;
- (UIView* (^)(CGFloat))Height;
- (UIView* (^)(CGFloat))CenterX;
- (UIView* (^)(CGFloat))CenterY;
- (UIView* (^)(CGSize))Size;
@end
UIView+Frame.m
#import "UIView+Frame.h"
@implementation UIView (Frame)
- (UIView* (^)(CGFloat))X
{
return ^UIView*(CGFloat x){
CGRect frame = self.frame;
frame.origin.x = x;
self.frame = frame;
return self;
};
}
- (UIView* (^)(CGFloat))Y
{
return ^UIView*(CGFloat y){
CGRect frame = self.frame;
frame.origin.y = y;
self.frame = frame;
return self;
};
}
- (UIView* (^)(CGFloat))Width
{
return ^UIView*(CGFloat width){
CGRect frame = self.frame;
frame.size.width = width;
self.frame = frame;
return self;
};
}
- (UIView* (^)(CGFloat))Height
{
return ^UIView*(CGFloat height){
CGRect frame = self.frame;
frame.size.height = height;
self.frame = frame;
return self;
};
}
- (UIView* (^)(CGFloat))CenterX
{
return ^UIView*(CGFloat centerX){
CGRect frame = self.frame;
frame.origin.x = centerX;
self.frame = frame;
return self;
};
}
- (UIView* (^)(CGFloat))CenterY
{
return ^UIView*(CGFloat centerY){
CGRect frame = self.frame;
frame.origin.y = centerY;
self.frame = frame;
return self;
};
}
- (UIView* (^)(CGSize))Size
{
return ^UIView*(CGSize size){
CGRect frame = self.frame;
frame.size = size;
self.frame = frame;
return self;
};
}
- (void)setX:(CGFloat)x
{
CGRect frame = self.frame;
frame.origin.x = x;
self.frame = frame;
}
- (CGFloat)x
{
return self.frame.origin.x;
}
- (void)setY:(CGFloat)y
{
CGRect frame = self.frame;
frame.origin.y = y;
self.frame = frame;
}
- (CGFloat)y
{
return self.frame.origin.y;
}
- (void)setWidth:(CGFloat)width
{
CGRect frame = self.frame;
frame.size.width = width;
self.frame = frame;
}
- (CGFloat)width
{
return self.frame.size.width;
}
- (void)setHeight:(CGFloat)height
{
CGRect frame = self.frame;
frame.size.height = height;
self.frame = frame;
}
- (CGFloat)height
{
return self.frame.size.height;
}
- (CGSize)size{
return self.frame.size;
}
- (void)setSize:(CGSize)size{
CGRect frame = self.frame;
frame.size = size;
self.frame = frame;
}
- (CGFloat)centerX{
return self.frame.origin.x;
}
- (void)setCenterX:(CGFloat)centerX{
CGRect frame = self.frame;
frame.origin.x = centerX;
self.frame = frame;
}
- (CGFloat)centerY{
return self.frame.origin.y;
}
- (void)setCenterY:(CGFloat)centerY{
CGRect frame = self.frame;
frame.origin.y = centerY;
self.frame = frame;
}
@end
筆者做為一名屌絲程序員,每天都在技術(shù)路上前行,由于本人天生愚鈍,學(xué)藝不精,在此獻(xiàn)丑啦!
項(xiàng)目地址:https://github.com/524429264/LSBC-Demo.git