
在iOS开发布局修改 frame 时需要繁琐的代码实现,今天偶尔看到一播客说到快速修改的 frame 的方法,自己动手写了一遍实现代码.
快速实现主要通过 添加类目的方式,对UIView 控件添加了一些直接修改 frame 属性的方法(如:获取高度.宽度,坐标等);具体代码实现如下:
.h文件,声明要用到的属性
1 // 2 // UIView+Layout.h 3 // Layout 4 // 5 // Created by Ager on 15/10/18. 6 // Copyright © 2015年 Ager. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 11 @interface UIView (Layout) 12 13 //顶,底,左,右 14 @PRoperty (nonatomic , assign)CGFloat top; 15 @property (nonatomic , assign)CGFloat bottom; 16 @property (nonatomic , assign)CGFloat left; 17 @property (nonatomic , assign)CGFloat right; 18 19 //坐标,x,y 20 @property (nonatomic , assign)CGFloat x; 21 @property (nonatomic , assign)CGFloat y; 22 @property (nonatomic , assign)CGPoint origin; 23 24 //中心点坐标 centerX,centerY 25 @property (nonatomic , assign)CGFloat centerX; 26 @property (nonatomic , assign)CGFloat centerY; 27 28 29 //大小 ,宽,高 30 @property (nonatomic , assign)CGFloat width; 31 @property (nonatomic , assign)CGFloat height; 32 @property (nonatomic , assign)CGSize size; 33 34 @endView Code
.m 文件实现对 属性 的操作.从而实现对 frame 的修改
1 //
2 // UIView+Layout.m
3 // Layout
4 //
5 // Created by Ager on 15/10/18.
6 // Copyright © 2015年 Ager. All rights reserved.
7 //
8
9 #import "UIView+Layout.h"
10
11 @implementation UIView (Layout)
12
13 //顶,底,左,右
14 //top;
15 - (CGFloat)top{
16 return self.frame.origin.y;
17 }
18
19 - (void)setTop:(CGFloat)top{
20 CGRect frame = self.frame;
21 frame.origin.y = top;
22 self.frame = frame;
23 }
24
25 //bottom;
26 - (CGFloat)bottom{
27 return CGRectGetMaxY(self.frame);
28 }
29
30 - (void)setBottom:(CGFloat)bottom{
31 CGRect frame = self.frame;
32 frame.origin.y = [self bottom] - [self height];
33 self.frame = frame;
34 }
35
36 //left;
37 - (CGFloat)left{
38 return self.frame.origin.x;
39 }
40
41 - (void)setLeft:(CGFloat)left{
42 CGRect frame = self.frame;
43 frame.origin.x = left;
44 self.frame = frame;
45 }
46
47 //right;
48 - (CGFloat)right{
49 return CGRectGetMaxX(self.frame);
50 }
51
52 - (void)setRight:(CGFloat)right{
53 CGRect frame = self.frame;
54 frame.origin.x = [self right] - [self width];
55 self.frame = frame;
56 }
57
58
59 //坐标,x,y
60 //x;
61 - (CGFloat)x{
62 return self.frame.origin.x;
63 }
64
65 - (void)setX:(CGFloat)x{
66 CGRect frame = self.frame;
67 frame.origin.x = x;
68 self.frame = frame;
69 }
70
71 //y;
72
73 - (CGFloat)y{
74 return self.origin.y;
75 }
76
77 - (void)setY:(CGFloat)y{
78 CGRect frame = self.frame;
79 frame.origin.y = y;
80 self.frame = frame;
81 }
82
83 //origin;
84 - (CGPoint)origin{
85 return self.frame.origin;
86 }
87
88 - (void)setOrigin:(CGPoint)origin{
89 CGRect frame = self.frame;
90 self.origin = origin;
91 self.frame = frame;
92 }
93
94
95 //中心点坐标 centerX,centerY
96 //centerX;
97 - (CGFloat)centerX{
98 return self.center.x;
99 }
100
101 - (void)setCenterX:(CGFloat)centerX{
102 CGPoint center = self.center;
103 center.x = centerX;
104 self.center = center;
105 }
106
107
108 //centerY;
109 - (CGFloat)centerY{
110 return self.center.y;
111 }
112
113 - (void)setCenterY:(CGFloat)centerY{
114 CGPoint center = self.center;
115 center.y = centerY;
116 self.center = center;
117 }
118
119
120 //大小 ,
121 //width;
122 - (CGFloat)width{
123 return self.frame.size.width;
124 }
125
126 - (void)setWidth:(CGFloat)width{
127 CGRect frame = self.frame;
128 frame.size.width = width;
129 self.frame = frame;
130 }
131
132
133 //height;
134 - (CGFloat)height{
135 return self.frame.size.height;
136 }
137
138 - (void)setHeight:(CGFloat)height{
139 CGRect frame = self.frame;
140 frame.size.height = height;
141 self.frame = frame;
142 }
143
144 //size;
145 - (CGSize)size{
146 return self.frame.size;
147 }
148
149
150 - (void)setSize:(CGSize)size{
151 CGRect frame = self.frame;
152 frame.size = size;
153 self.frame = frame;
154 }
155
156 @end
View Code
应用举例:
1 //修改宽 2 aview.width = 300; 3 //修改x坐标 4 aview.x = 100; 5 //修改y坐标 6 aview.y = 100;View Code
原文参考:http://mp.weixin.QQ.com/s?__biz=MzA3NzM0NzkxMQ==&mid=216102953&idx=2&sn=703281ec344cc6fdb5b52f681002e255&scene=23&srcid=1018RAYFkM4iK97OMvC1c2PP#rd