Masonry
1> 主要类的作用
MASConstraintMaker : NSObject ->约束控制器。控制更新,删除,或者新增约束
MASViewAttribute : NSObject ->封装了一些MASConstraint持有的属性,每一个Attribute都有一个View与之对应
MASConstraint : NSObject ->约束的基类,定义了Constraint的基本属性和方法
MASViewConstraint : MASConstraint ->约束的主要实现类。所有对约束使用的功能均在此类中完成
MASCompositeConstraint : MASConstraint ->约束的集合类。内部有一个数组,可以保存多个MASViewConstraint
MASLayoutConstraint : NSLayoutConstraint ->自定义的约束
2> 点语法的链式调用
点语法:在 Objective-C 中,对于点语法的使用,最常见于属性的访问,比如对在方法内部用 self.xxx,在类的实例中用 classInstance.xxx(OC点语法的本质是方法调用,不是直接访问成员变量);
小括号调用:Objective-C 中一般用中括号 [] 来实现方法的调用,而对于 Block 的调用则还是保留使用小括号 () 的方式,因此我们可以考虑用 Block 来实现在链式语法中的 () ;
如何实现连续访问?:Block 可理解为带有自动变量的匿名函数或函数指针,它也是有返回值的。我们可以把上述类实例每次方法的调用(实质为 Block 的调用)的返回值都设为当前类实例本身,即
classInstance.method1() 返回了当前 classInstance,此时可在其后面继续进行 .method2() 的调用,以此类推。
例: - (void)setAge:(int)newAge {
self.age = newAge;
}
- (void)setAge:(int)newAge {
[self setAge:newAge];
}
3> 如何使用代理实现的链式语法
例:make.left.right.top.bottom.mas_equalTo(superview)
过程:make.left->MASViewConstraint
make.left.right-> MASCompositeConstraint
make.left.right.top-> MASCompositeConstraint
make.left.right.top.bottom-> MASCompositeConstraint
addConstraint这个动作都会在 make 中发生。
4>怎么找到父view、如何找到最近的父view的
MAS_VIEW *closestCommonSuperview = nil;
MAS_VIEW *secondViewSuperview = view;
while (!closestCommonSuperview && secondViewSuperview) {
MAS_VIEW *firstViewSuperview = self;
while (!closestCommonSuperview && firstViewSuperview) {
if (secondViewSuperview == firstViewSuperview) {
closestCommonSuperview = secondViewSuperview;
}
firstViewSuperview = firstViewSuperview.superview;
}
secondViewSuperview = secondViewSuperview.superview;
}
return closestCommonSuperview;
1> 主要类的作用
MASConstraintMaker : NSObject ->约束控制器。控制更新,删除,或者新增约束
MASViewAttribute : NSObject ->封装了一些MASConstraint持有的属性,每一个Attribute都有一个View与之对应
MASConstraint : NSObject ->约束的基类,定义了Constraint的基本属性和方法
MASViewConstraint : MASConstraint ->约束的主要实现类。所有对约束使用的功能均在此类中完成
MASCompositeConstraint : MASConstraint ->约束的集合类。内部有一个数组,可以保存多个MASViewConstraint
MASLayoutConstraint : NSLayoutConstraint ->自定义的约束
2> 点语法的链式调用
点语法:在 Objective-C 中,对于点语法的使用,最常见于属性的访问,比如对在方法内部用 self.xxx,在类的实例中用 classInstance.xxx(OC点语法的本质是方法调用,不是直接访问成员变量);
小括号调用:Objective-C 中一般用中括号 [] 来实现方法的调用,而对于 Block 的调用则还是保留使用小括号 () 的方式,因此我们可以考虑用 Block 来实现在链式语法中的 () ;
如何实现连续访问?:Block 可理解为带有自动变量的匿名函数或函数指针,它也是有返回值的。我们可以把上述类实例每次方法的调用(实质为 Block 的调用)的返回值都设为当前类实例本身,即
classInstance.method1() 返回了当前 classInstance,此时可在其后面继续进行 .method2() 的调用,以此类推。
例: - (void)setAge:(int)newAge {
self.age = newAge;
}
- (void)setAge:(int)newAge {
[self setAge:newAge];
}
3> 如何使用代理实现的链式语法
例:make.left.right.top.bottom.mas_equalTo(superview)
过程:make.left->MASViewConstraint
make.left.right-> MASCompositeConstraint
make.left.right.top-> MASCompositeConstraint
make.left.right.top.bottom-> MASCompositeConstraint
addConstraint这个动作都会在 make 中发生。
4>怎么找到父view、如何找到最近的父view的
MAS_VIEW *closestCommonSuperview = nil;
MAS_VIEW *secondViewSuperview = view;
while (!closestCommonSuperview && secondViewSuperview) {
MAS_VIEW *firstViewSuperview = self;
while (!closestCommonSuperview && firstViewSuperview) {
if (secondViewSuperview == firstViewSuperview) {
closestCommonSuperview = secondViewSuperview;
}
firstViewSuperview = firstViewSuperview.superview;
}
secondViewSuperview = secondViewSuperview.superview;
}
return closestCommonSuperview;