Skip to content

Commit

Permalink
优化代码注释
Browse files Browse the repository at this point in the history
  • Loading branch information
youngsoft committed Apr 19, 2016
1 parent 5079a25 commit 109946e
Show file tree
Hide file tree
Showing 6 changed files with 165 additions and 89 deletions.
47 changes: 23 additions & 24 deletions MyLayout/Lib/MyFloatLayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,34 +9,28 @@
#import "MyBaseLayout.h"


/*
专用于浮动布局子视图的扩展属性。
*/

@interface UIView(MyFloatLayoutExt)

/*是否反方向浮动,默认是NO表示正向浮动,具体方向则根据浮动布局视图的方向。如果是垂直布局则默认是向左浮动的,如果是水平布局则默认是向上浮动的。
/**
*是否反方向浮动,默认是NO表示正向浮动,具体方向则根据浮动布局视图的方向。如果是垂直布局则默认是向左浮动的,如果是水平布局则默认是向上浮动的。
如果这个值设置为YES则当布局是垂直布局时则向右浮动,而如果是水平布局则向下浮动。
*/
@property(nonatomic,assign,getter=isReverseFloat) IBInspectable BOOL reverseFloat;

/*
清楚浮动,默认是NO。这个属性也跟布局视图的方向相关。如果设置为了清除浮动属性则表示本子视图不会在浮动方向上紧跟在前一个
浮动子视图的后面,而是会另外新起一行或者一列来进行布局。
reverseFloat和clearFloat这两个属性的定义是完全参考CSS样式表中浮动布局中的float和clear这两个属性。
/**
*清除浮动,默认是NO。这个属性也跟布局视图的方向相关。如果设置为了清除浮动属性则表示本子视图不会在浮动方向上紧跟在前一个浮动子视图的后面,而是会另外新起一行或者一列来进行布局。reverseFloat和clearFloat这两个属性的定义是完全参考CSS样式表中浮动布局中的float和clear这两个属性。
*/
@property(nonatomic,assign) IBInspectable BOOL clearFloat;


/*
默认值是0, 值的设定指定在0和1之间。这个属性的意义根据浮动布局视图的方向而不同。
当浮动布局视图是垂直布局时,这个属性用来设置宽度占用当前的剩余宽度的比重,这样子视图就不需要明确的设定宽度值。
当浮动布局视图是水平布局时,这个属性用来设置高度占用当前的剩余高度的比重,这样子视图就不需要明确的设定高度值。
/**
*浮动视图的尺寸的比重。默认值是0, 值的设定指定在0和1之间。这个属性的意义根据浮动布局视图的方向而不同。
*当浮动布局视图是垂直布局时,这个属性用来设置宽度占用当前的剩余宽度的比重,这样子视图就不需要明确的设定宽度值。
*当浮动布局视图是水平布局时,这个属性用来设置高度占用当前的剩余高度的比重,这样子视图就不需要明确的设定高度值。
举例来说,假设布局视图的宽度是100,而当前视图的前面一个视图已经占据了20的宽度,那么当设置当前视图的weight为1时则当前视图的宽度就会被设定为80。这样当前视图是不会浮动
到一个新的行的。而如果设定为0.8则当前视图的宽度则为(100-20)*0.8 = 16了。
*/
@property(nonatomic, assign) IBInspectable CGFloat weight;

Expand All @@ -47,25 +41,30 @@


/**
* 浮动布局,类似CCS提供的float类型的布局,浮动布局的介绍请参考:http://www.cnblogs.com/iyangyuan/archive/2013/03/27/2983813.html
* 浮动布局,里面的子视图通过设定的向左向右浮动或者向上浮动来实现那些不规则的布局视图。
*/
@interface MyFloatLayout : MyBaseLayout


//初始化一个浮动布局并指定布局的方向。
/**
*初始化一个浮动布局并指定布局的方向。当方向设置为MyLayoutViewOrientation_Vert时表示为左右浮动布局视图,而设置为MyLayoutViewOrientation_Horz则表示为上下浮动布局视图。
*/
-(id)initWithOrientation:(MyLayoutViewOrientation)orientation;

+(id)floatLayoutWithOrientation:(MyLayoutViewOrientation)orientation;

//浮动布局的方向:
//如果是MyLayoutViewOrientation_Vert则表示从左到右,从上到下的垂直布局方式,这个方式是默认方式。
//如果是MyLayoutViewOrientation_Horz则表示从上到下,从左到右的水平布局方式
/**
*浮动布局的方向。
*如果是MyLayoutViewOrientation_Vert则表示从左到右,从上到下的垂直布局方式,这个方式是默认方式。
*如果是MyLayoutViewOrientation_Horz则表示从上到下,从左到右的水平布局方式
*/
@property(nonatomic,assign) MyLayoutViewOrientation orientation;


//浮动布局内所有子视图的整体停靠对齐位置设定,默认是MyMarginGravity_None
//如果视图方向为MyLayoutViewOrientation_Vert时则水平方向的停靠失效。只能设置MyMarginGravity_Vert_Top,MyMarginGravity_Vert_Center,MyMarginGravity_Vert_Bottom 三个值。
//如果视图方向为MyLayoutViewOrientation_Horz时则垂直方向的停靠失效。只能设置MyMarginGravity_Horz_Left,MyMarginGravity_Horz_Center,MyMarginGravity_Horz_Right
/**
*浮动布局内所有子视图的整体停靠对齐位置设定,默认是MyMarginGravity_None
*如果视图方向为MyLayoutViewOrientation_Vert时则水平方向的停靠失效。只能设置MyMarginGravity_Vert_Top,MyMarginGravity_Vert_Center,MyMarginGravity_Vert_Bottom 三个值。
*如果视图方向为MyLayoutViewOrientation_Horz时则垂直方向的停靠失效。只能设置MyMarginGravity_Horz_Left,MyMarginGravity_Horz_Center,MyMarginGravity_Horz_Right
*/
@property(nonatomic,assign) IBInspectable MyMarginGravity gravity;


Expand Down
58 changes: 34 additions & 24 deletions MyLayout/Lib/MyFlowLayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,51 +26,61 @@
orientation为MyLayoutViewOrientation_Horz,arrangedCount不为0,支持wrapContentHeight,支持wrapContentWidth,支持averageArrange。
流式布局支持子视图的宽度依赖于高度或者高度依赖于宽度,以及高度或者宽度依赖于流式布局本身的高度或者宽度
**/
*/
@interface MyFlowLayout : MyBaseLayout

//初始化一个流式布局并指定布局的方向和布局的数量,如果数量为0则表示内容填充约束流式布局
/**
*初始化一个流式布局并指定布局的方向和布局的数量,如果数量为0则表示内容填充约束流式布局
*/
-(id)initWithOrientation:(MyLayoutViewOrientation)orientation arrangedCount:(NSInteger)arrangedCount;

+(id)flowLayoutWithOrientation:(MyLayoutViewOrientation)orientation arrangedCount:(NSInteger)arrangedCount;

//流式布局的方向:
//如果是MyLayoutViewOrientation_Vert则表示从左到右,从上到下的垂直布局方式,这个方式是默认方式。
//如果是MyLayoutViewOrientation_Horz则表示从上到下,从左到右的水平布局方式
/**
*流式布局的方向:
*如果是MyLayoutViewOrientation_Vert则表示从左到右,从上到下的垂直布局方式,这个方式是默认方式。
*如果是MyLayoutViewOrientation_Horz则表示从上到下,从左到右的水平布局方式
*/
@property(nonatomic,assign) IBInspectable MyLayoutViewOrientation orientation;


//流式布局内所有子视图的整体停靠对齐位置设定。
//如果视图方向为MyLayoutViewOrientation_Vert时且averageArrange为YES时则水平方向的停靠失效。
//如果视图方向为MyLayoutViewOrientation_Horz时且averageArrange为YES时则垂直方向的停靠失效。
/**
*流式布局内所有子视图的整体停靠对齐位置设定。
*如果视图方向为MyLayoutViewOrientation_Vert时且averageArrange为YES时则水平方向的停靠失效。
*如果视图方向为MyLayoutViewOrientation_Horz时且averageArrange为YES时则垂直方向的停靠失效。
*/
@property(nonatomic,assign) IBInspectable MyMarginGravity gravity;


//指定方向上的子视图的数量,默认是0表示为内容填充约束流式布局,当数量不为0时则是数量约束流式布局。当值为0时则表示当子视图在
//方向上的尺寸超过布局视图时则会新起一行或者一列。而如果数量不为0时则:
//如果方向为MyLayoutViewOrientation_Vert,则表示从左到右的数量,当子视图从左往右满足这个数量后新的子视图将会换行再排列
//如果方向为MyLayoutViewOrientation_Horz,则表示从上到下的数量,当子视图从上往下满足这个数量后新的子视图将会换列再排列
/**
*指定方向上的子视图的数量,默认是0表示为内容填充约束流式布局,当数量不为0时则是数量约束流式布局。当值为0时则表示当子视图在方向上的尺寸超过布局视图时则会新起一行或者一列。而如果数量不为0时则:
如果方向为MyLayoutViewOrientation_Vert,则表示从左到右的数量,当子视图从左往右满足这个数量后新的子视图将会换行再排列
如果方向为MyLayoutViewOrientation_Horz,则表示从上到下的数量,当子视图从上往下满足这个数量后新的子视图将会换列再排列
*/
@property(nonatomic, assign) IBInspectable NSInteger arrangedCount;

//指定是否均分布局方向上的子视图的宽度或者高度,默认是NO。
//如果是MyLayoutViewOrientation_Vert则表示每行的子视图的宽度会被均分,这样子视图不需要指定宽度,但是布局视图必须要指定一个明确的宽度值,如果设置为YES则wrapContentWidth会失效。
//如果是MyLayoutViewOrientation_Horz则表示每列的子视图的高度会被均分,这样子视图不需要指定高度,但是布局视图必须要指定一个明确的高度值,如果设置为YES则wrapContentHeight会失效。
//内容填充约束流式布局不支持averageArrange这个属性。
/**
*指定是否均分布局方向上的子视图的宽度或者高度,默认是NO。
如果是MyLayoutViewOrientation_Vert则表示每行的子视图的宽度会被均分,这样子视图不需要指定宽度,但是布局视图必须要指定一个明确的宽度值,如果设置为YES则wrapContentWidth会失效。
如果是MyLayoutViewOrientation_Horz则表示每列的子视图的高度会被均分,这样子视图不需要指定高度,但是布局视图必须要指定一个明确的高度值,如果设置为YES则wrapContentHeight会失效。
内容填充约束流式布局不支持averageArrange这个属性。
*/
@property(nonatomic,assign) IBInspectable BOOL averageArrange;


//流式布局中每排子视图的停靠对齐位置设定。
//如果是MyLayoutViewOrientation_Vert则只用于表示每行子视图的上中下停靠对齐位置,这个属性只支持MyMarginGravity_Vert_Top,MyMarginGravity_Vert_Center,MyMarginGravity_Vert_Bottom,MyMarginGravity_Vert_Fill 这里的对齐基础是以每行中的最高的子视图为基准。
//如果是MyLayoutViewOrientation_Horz则只用于表示每列子视图的左中右停靠对齐位置,这个属性只支持MyMarginGravity_Horz_Left,MyMarginGravity_Horz_Center,MyMarginGravity_Horz_Right,MyMarginGravity_Horz_Fill 这里的对齐基础是以每列中的最宽的子视图为基准。
/**
*流式布局中每排子视图的停靠对齐位置设定。
如果是MyLayoutViewOrientation_Vert则只用于表示每行子视图的上中下停靠对齐位置,这个属性只支持MyMarginGravity_Vert_Top,MyMarginGravity_Vert_Center,MyMarginGravity_Vert_Bottom,MyMarginGravity_Vert_Fill 这里的对齐基础是以每行中的最高的子视图为基准。
如果是MyLayoutViewOrientation_Horz则只用于表示每列子视图的左中右停靠对齐位置,这个属性只支持MyMarginGravity_Horz_Left,MyMarginGravity_Horz_Center,MyMarginGravity_Horz_Right,MyMarginGravity_Horz_Fill 这里的对齐基础是以每列中的最宽的子视图为基准。
*/
@property(nonatomic,assign) IBInspectable MyMarginGravity arrangedGravity;


//子视图之间的垂直和水平的间距,默认为0。当子视图之间的间距是固定时可以通过直接设置这两个属性值来指定间距
//而不需要为每个子视图来设置margin值
//subviewMargin表示同时设置水平和垂直间距一致。
/**
*子视图之间的垂直和水平的间距,默认为0。当子视图之间的间距是固定时可以通过直接设置这两个属性值来指定间距而不需要为每个子视图来设置margin值
*/
@property(nonatomic ,assign) IBInspectable CGFloat subviewVertMargin;
@property(nonatomic, assign) IBInspectable CGFloat subviewHorzMargin;
@property(nonatomic, assign) IBInspectable CGFloat subviewMargin;
@property(nonatomic, assign) IBInspectable CGFloat subviewMargin; //同时设置水平和垂直间距。



Expand Down
39 changes: 26 additions & 13 deletions MyLayout/Lib/MyLayoutDime.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,33 +9,46 @@
#import "MyLayoutDef.h"

/**
* 视图在布局中的尺寸对象
*视图的布局尺寸类,用来设置视图在布局视图中的宽度和高度的尺寸值
*/
@interface MyLayoutDime : NSObject<NSCopying>

//

/**
*设置尺寸的具体值,这个具体值可以设置为NSNumber, MyLayoutDime以及NSArray<MyLayoutDime*>数组和nil值。
设置为NSNumber值表示指定具体的宽度或者高度数值
设置为MyLayoutDime值表示宽度和高度与设置的对象有依赖关系, 甚至可以依赖对象本身
设置为NSArray<MyLayoutDime*>数组的概念就是所有数组里面的子视图的尺寸平分父视图的尺寸。只有相对布局里面的子视图才支持这种设置。
设置为nil时则清除设置的具体值。
*/
-(MyLayoutDime* (^)(id val))equalTo;


/**
* 设置尺寸的倍数
*/
-(MyLayoutDime* (^)(CGFloat val))multiply;

//加,用这个和equalTo的数组功能可以实现均分子视图宽度以及间隔的设定。
/**
*设置尺寸增加值。
*/
-(MyLayoutDime* (^)(CGFloat val))add;


//最小的尺寸。如果设置了则最小不能低于这个值。
/**
*设置尺寸的最小值。如果设置了则最小不能低于这个值。
*/
-(MyLayoutDime* (^)(CGFloat val))min;

//最大的尺寸。如果设置了则最大不能超过这个值
/**
*设置尺寸的最大值。如果设置了则最大不能超过这个值
*/
-(MyLayoutDime* (^)(CGFloat val))max;



/*NSNumber, MyLayoutDime以及MyLayoutDime数组,
***NSNumber值表示指定具体的宽度或者高度
***MyLayoutDime值表示宽度和高度与设置的对象有依赖关系, 甚至val的值就是对象本身
***MyLayoutDime数组的概念就是所有数组里面的子视图的尺寸平分父视图的尺寸。只有相对布局里面的子视图才支持这种设置。
/**
*清除上面的所有设置的尺寸信息
*/
-(MyLayoutDime* (^)(id val))equalTo;

//清除设置的尺寸信息
-(void)clear;


Expand Down
41 changes: 25 additions & 16 deletions MyLayout/Lib/MyLayoutPos.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,34 +9,43 @@
#import "MyLayoutDef.h"

/**
* 视图在布局中的偏移位置对象
* 视图在布局中的布局位置类,用来设置视图在布局视图的位置和偏移。
*/
@interface MyLayoutPos : NSObject<NSCopying>

//设置偏移量
-(MyLayoutPos* (^)(CGFloat val))offset;

//最小的偏移量。如果设置了则最小不能低于这个值。
-(MyLayoutPos* (^)(CGFloat val))min;

//最大偏移量。如果设置了则最大不能超过这个值
-(MyLayoutPos* (^)(CGFloat val))max;


/*
val的取值可以是NSNumber,MyLayoutPos,NSArray类型的对象
**如果是NSNumber类型的值表示在这个方向相对父视图或者兄弟视图(线性布局)的偏移值,比如:
/**
*设置视图的具体位置,这个具体位置可以取值为NSNumber,MyLayoutPos,NSArray<MyLayoutPos*>类型的对象
设置为NSNumber类型的值表示在这个方向相对父视图或者兄弟视图(线性布局)的偏移值,比如:
v.leftPos.equalTo(@10) 表示视图v左边偏移父视图或者兄弟视图10个点的位置。
v.centerXPos.equalTo(@10) 表示视图v的水平中心点在父视图的水平中心点并偏移10个点的位置
v.leftPos.equalTo(@0.1) 如果值被设置为大于0小于1则只在框架布局和线性布局里面有效表示左边距的值占用父视图宽度的10%
**如果是MyLayoutPos类型的值则表示这个方向的值是相对于另外一个视图的边界值,比如:
设置为MyLayoutPos类型的值则表示这个方向的值是相对于另外一个视图的边界值,比如:
v1.leftPos.equal(v2.rightPos) 表示视图v1的左边边界值等于v2的右边边界值
**如果是NSArray类型的值则只能用在相对布局的centerXPos,centerYPos中,数组里面里面也必须是centerXPos,表示指定的视图数组在父视图中居中,比如: A.centerXPos.equalTo(@[B.centerXPos.offset(20)].offset(20) 表示A和B在父视图中居中往下偏移20,B在A的右边,间隔20。
设置为NSArray<MyLayoutPos*>类型的值则只能用在相对布局的centerXPos,centerYPos中,数组里面里面也必须是centerXPos,表示指定的视图数组在父视图中居中,比如: A.centerXPos.equalTo(@[B.centerXPos.offset(20)].offset(20) 表示A和B在父视图中居中往下偏移20,B在A的右边,间隔20。
*/
-(MyLayoutPos* (^)(id val))equalTo;


//清除各种属性设置
/**
*设置偏移量
*/
-(MyLayoutPos* (^)(CGFloat val))offset;

/**
*最小的偏移量。如果设置了则最小不能低于这个值。
*/
-(MyLayoutPos* (^)(CGFloat val))min;

/**
*最大偏移量。如果设置了则最大不能超过这个值
*/
-(MyLayoutPos* (^)(CGFloat val))max;


/**
*清除各种属性设置
*/
-(void)clear;

//通过如下属性获取上面的设置结果。
Expand Down
13 changes: 8 additions & 5 deletions MyLayout/Lib/MyRelativeLayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@



/*
相对布局视图,里面的所有子视图都需要指定位置和尺寸的依赖关系
相对布局支持wrapContentHeight,wrapContentWidth特性
/**
*相对布局视图是一种里面的子视图通过设置相互依赖的约束而进行布局视图。
*/
@interface MyRelativeLayout : MyBaseLayout


//均分宽度时当有隐藏子视图,是否参与宽度计算,这个属性只有在参与均分视图的子视图隐藏时才有效,默认是NO
/**
*子视图调用widthDime.equalTo(NSArray<MyLayoutDime*>均分宽度时当有子视图隐藏时是否参与宽度计算,这个属性只有在参与均分视图的子视图隐藏时才有效,默认是NO
*/
@property(nonatomic, assign) IBInspectable BOOL flexOtherViewWidthWhenSubviewHidden;

//均分高度时当有隐藏子视图,是否参与高度计算,这个属性只有在参与均分视图的子视图隐藏时才有效,默认是NO
/**
*子视图调用heightDime.equalTo(NSArray<MyLayoutDime*>均分高度时当有子视图隐藏时是否参与高度计算,这个属性只有在参与均分视图的子视图隐藏时才有效,默认是NO
*/
@property(nonatomic, assign) IBInspectable BOOL flexOtherViewHeightWhenSubviewHidden;


Expand Down
Loading

0 comments on commit 109946e

Please sign in to comment.