版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.07.20 |
前言
我们做APP界面,也就是布局UI,那么关于布局,我们有很多方法,苹果也都提供了支持,市场上我们用的并不是系统提供原生的layout,对于OC语言一般都是使用一个第三方的布局框架 —— Masonry。接下来几篇我们就一起深入看一下这个框架。感兴趣的看上面几篇文章。
1. Masonry框架详细解析(一) —— 基本概览(一)
2. Masonry框架详细解析(二) —— 基本结构API和约束入口(一)
3. Masonry框架详细解析(三) —— MASConstraintMaker工厂类(一)
4. Masonry框架详细解析(四) —— MASConstraint类解析(一)
5. Masonry框架详细解析(五) —— MASCompositeConstraint类解析(一)
API
该类是一个单约束,包含创建NSLayoutConstraint所需要的属性,并将其添加到适合的view上,首先看一下API
/**
* A single constraint.
* Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view
*/
@interface MASViewConstraint : MASConstraint <NSCopying>
/**
* First item/view and first attribute of the NSLayoutConstraint
*/
//NSLayoutConstraint的第一个item/view和第一个属性
@property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute;
/**
* Second item/view and second attribute of the NSLayoutConstraint
*/
//NSLayoutConstraint的第二个item/view和第二个属性
@property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute;
/**
* initialises the MASViewConstraint with the first part of the equation
*
* @param firstViewAttribute view.mas_left, view.mas_width etc.
*
* @return a new view constraint
*/
//利用等式的第一部分初始化MASViewConstraint
//参数 firstViewAttribute:view.mas_left, view.mas_width等
- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute;
/**
* Returns all MASViewConstraints installed with this view as a first item.
*
* @param view A view to retrieve constraints for.
*
* @return An array of MASViewConstraints.
*/
//返回该view作为第一个item安装的所有的MASViewConstraints约束
//参数:view,一个用于检索约束的视图
+ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view;
@end
下面就简单的看一下这几个方法和属性
1. 实例化方法
实例化方法指的是下面这个方法
- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute;
下面看一下实现
@property (nonatomic, assign) MASLayoutPriority layoutPriority;
@property (nonatomic, assign) CGFloat layoutMultiplier;
- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute {
self = [super init];
if (!self) return nil;
_firstViewAttribute = firstViewAttribute;
self.layoutPriority = MASLayoutPriorityRequired;
self.layoutMultiplier = 1;
return self;
}
2. 返回所有安装的约束
+ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view;
+ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view {
return [view.mas_installedConstraints allObjects];
}
这里要用到一个MAS_VIEW(其实就是UIView)的一个分类。
@interface MAS_VIEW (MASConstraints)
@property (nonatomic, readonly) NSMutableSet *mas_installedConstraints;
@end
@implementation MAS_VIEW (MASConstraints)
static char kInstalledConstraintsKey;
- (NSMutableSet *)mas_installedConstraints {
//运行时获取当前view的所有安装的约束
NSMutableSet *constraints = objc_getAssociatedObject(self, &kInstalledConstraintsKey);
if (!constraints) {
constraints = [NSMutableSet set];
objc_setAssociatedObject(self, &kInstalledConstraintsKey, constraints, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
return constraints;
}
@end
同MASCompositeConstraint
类一样,在.m文件里面MASViewConstraint
也重写了很多的父类的方法。结构很清晰。
结构
下面看一下该类的结构
大家可以看见:
- 在.h中只暴露出来一个实例化方法和返回所有已安装约束的方法。
- 在.m中重写了很多父类的方法,这个在讲述
MASCompositeConstraint
时候说过,是类似的。
后记
本篇主要讲述了MASViewConstraint类解析,感兴趣的给个赞或者关注~~~~