您的位置:首页 > 移动开发 > IOS开发

修改frame快捷方法,不必再繁琐的计算

2016-03-21 16:06 387 查看
平时计算控件frame时我们是这样计算的:

//首先设置frame
view.frame = CGRectMake(0, 0, 320, 150);
//如果想改变其中的宽或者高或者位置,则需要重新设置frame大小,这个时候需要重新写一遍以前设置的frame
view.frame = CGRectMake(view.frame.origin.x, 100, view.frame.size.width, view.frame.size.height);

这样写是不是很麻烦,如果遇到很多控件都需要改变的时候,再写这么多设置frame的代码是不是很麻烦呢?那么我们不如就直接创建一个category
一、创建一个类别:





二、写代码

.h 文件定义了 x, y, width, height 等方便读写的属性,代码如下:

#import <UIKit/UIKit.h>

@interface UIView (Layout)

@property (assign, nonatomic) CGFloat    top;
@property (assign, nonatomic) CGFloat    bottom;
@property (assign, nonatomic) CGFloat    left;
@property (assign, nonatomic) CGFloat    right;

@property (assign, nonatomic) CGFloat    x;
@property (assign, nonatomic) CGFloat    y;
@property (assign, nonatomic) CGPoint    origin;

@property (assign, nonatomic) CGFloat    centerX;
@property (assign, nonatomic) CGFloat    centerY;

@property (assign, nonatomic) CGFloat    width;
@property (assign, nonatomic) CGFloat    height;
@property (assign, nonatomic) CGSize    size;

@end

.m 文件实现各个属性的setter和getter方法,代码如下:
#import "UIView+Layout.h"

@implementation UIView (Layout)

@dynamic top;
@dynamic bottom;
@dynamic left;
@dynamic right;

@dynamic width;
@dynamic height;

@dynamic size;

@dynamic x;
@dynamic y;

- (CGFloat)top
{
return self.frame.origin.y;
}

- (void)setTop:(CGFloat)top
{
CGRect frame = self.frame;
frame.origin.y = top;
self.frame = frame;
}

- (CGFloat)left
{
return self.frame.origin.x;
}

- (void)setLeft:(CGFloat)left
{
CGRect frame = self.frame;
frame.origin.x = left;
self.frame = frame;
}

- (CGFloat)bottom
{
return self.frame.size.height + self.frame.origin.y;
}

- (void)setBottom:(CGFloat)bottom
{
CGRect frame = self.frame;
frame.origin.y = bottom - frame.size.height;
self.frame = frame;
}

- (CGFloat)right
{
return self.frame.size.width + self.frame.origin.x;
}

- (void)setRight:(CGFloat)right
{
CGRect frame = self.frame;
frame.origin.x = right - frame.size.width;
self.frame = frame;
}

- (CGFloat)x
{
return self.frame.origin.x;
}

- (void)setX:(CGFloat)value
{
CGRect frame = self.frame;
frame.origin.x = value;
self.frame = frame;
}

- (CGFloat)y
{
return self.frame.origin.y;
}

- (void)setY:(CGFloat)value
{
CGRect frame = self.frame;
frame.origin.y = value;
self.frame = frame;
}

- (CGPoint)origin
{
return self.frame.origin;
}

- (void)setOrigin:(CGPoint)origin
{
CGRect frame = self.frame;
frame.origin = origin;
self.frame = frame;
}

- (CGFloat)centerX
{
return self.center.x;
}

- (void)setCenterX:(CGFloat)centerX
{
CGPoint center = self.center;
center.x = centerX;
self.center = center;
}

- (CGFloat)centerY
{
return self.center.y;
}

- (void)setCenterY:(CGFloat)centerY
{
CGPoint center = self.center;
center.y = centerY;
self.center = center;
}

- (CGFloat)width
{
return self.frame.size.width;
}

- (void)setWidth:(CGFloat)width
{
CGRect frame = self.frame;
frame.size.width = width;
self.frame = frame;
}

- (CGFloat)height
{
return self.frame.size.height;
}

- (void)setHeight:(CGFloat)height
{
CGRect frame = self.frame;
frame.size.height = height;
self.frame = frame;
}

- (CGSize)size
{
return self.frame.size;
}

- (void)setSize:(CGSize)size
{
CGRect frame = self.frame;
frame.size = size;
self.frame = frame;
}
@end


三、使用的时候只需要导入#import "UIView+Layout.h"就可以了

view.y = 100;//改变y坐标
view.x = 100;//改变x坐标
view.width = 100;//改变宽度
view.height = 100;//改变高度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios frame计算