使用Category 重写frame

我们在开发的过程中 经常会计算我们控件的frame 值

一般情况下都是这样的

获得x: self.frame.origin.x

获得y:self.frame.origin.y

获得width :self.frame.size.width

获得height:self.frame.size.height

这样写起来非常的麻烦 我们可以新建一个分类

重写frame 的set get 方法

这样我们可以实现单独对变量进行修改值

之前因为frame 是个结构体 嵌套两个结构体 所以没办法对其值进行单独的修改

#import <UIKit/UIKit.h>

@interface UIView (UIViewFrame)

//直接获得x 的值

@property(nonatomic,assign)CGFloat x;

//直接获得y 的值

@property(nonatomic,assign)CGFloat y;

//直接获得 width

@property(nonatomic,assign)CGFloat width;

//直接获得 height

@property(nonatomic,assign)CGFloat height;

@end
#import "UIView+UIViewFrame.h"

@implementation UIView (UIViewFrame)

//直接获得x 的值
-(void)setX:(CGFloat)x
{
    CGRect rect = self.frame;

    rect.origin.x = x;

    self.frame = rect;

}

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

}
//直接获得y 的值
-(void)setY:(CGFloat)y
{
    CGRect rect = self.frame;

    rect.origin.y = y;

    self.frame = rect;

}

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

}
//直接获得 width
-(void)setWidth:(CGFloat)width
{
    CGRect rect = self.frame;

    rect.size.width = width;

    self.frame = rect;
}
-(CGFloat)width
{
    return self.frame.size.width;
}
//直接获得 height
-(void)setHeight:(CGFloat)height
{
    CGRect rect = self.frame;

    rect.size.height = height;

    self.frame = rect;
}

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

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 09:37:18

使用Category 重写frame的相关文章

iOS Category实现原理 (补充)

iOS Category实现原理 (补充) load 和 initialize load load方法会在程序启动就会调用,当装载类信息的时候就会调用. 调用顺序看一下源代码.在 objc-loadmethod.m 文件中实现 void call_load_methods(void) { static bool loading = NO; bool more_categories; loadMethodLock.assertLocked(); // Re-entrant calls do not

ios开发级联菜单(利用父子控制器--两个菜单封装为两个子控制器来实现)

一:1:级联菜单可以使用两个tableView来实现,也可以利用父子控制器,两个控制器来实现,根视图控制器作为两个控制器的父控制器,来管理两个子控制器.2:将左右菜单分别交给两个控制器去管理,对于一些复杂的业务逻辑,涉及大量回调操作,业务逻辑也要相对复杂,则不建议采取封装成view去处理,最好还是利用一个控制器去管理其内部复杂的业务逻辑,具体做法就是:利用父子控制器,将子控制器交由父控制器去管理,将子控制器的view添加到父控制器的view上.效果如图: 二:代码 1:根控制器代码:添加两个子控

Java制作最难练手速游戏,Faker都坚持不了一分钟

想练手速,来啊,互相伤害啊 Java制作最难练手速游戏,目测Faker也坚持不了一分钟 制作思路:只靠Java实现.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java.Java. 字母模型应该是整个游戏的主角,因为整个游戏过程中都涉及到它的运动,比如坠落,消失,产生等,首先应该考虑字母随即出现的位置,在游戏中不断下落,计算下落的高

IOS 通过 代码 自定义cell(Cell的高度不一致)(优化性能)

创建cell的步骤 1.新建一个继承自UITabelViewCell的类 2.重写 initWithStyle:ReuseIdentifier: 方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,子控件要添加到contentView中) 进行子控件一次性的属性设置(有些属性中需要设置一次,比如字体\固定的图片) 3.提供2个模型 数据模型:存放文字数据\图片数据 frame模型:存放数据模型\所有子控件的frame\cell的高度(可优化性能) 4.cell拥有一个frame模

touchesBegan: withEvent: &lt;--- with UIScrollView / UIImageView

touchesBegan: withEvent: / touchesMoved: withEvent: / touchesEnded: withEvent: 等只能被UIView捕获(如有问题请指出对请指出,路过的大牛请勿喷),当我们创建 UIScrollView 或 UIImageView 时,当点击时UIScrollView 或 UIImageView 会截获touch事件,导致touchesBegan: withEvent:/touchesMoved: withEvent:/touches

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中

iOS -- UITableViewCell -- 通过代码自定义Cell(cell的高度不一致)

1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 Ø添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中) Ø进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的图片) 3.提供2个模型 Ø数据模型: 存放文字数据\图片数据 Øframe模型: 存放数据模型\所有子控件的frame\cell的高度 4.cell拥有一个frame模型(不要直接拥有数据

iOS UI基础-9.2 UITableView 简单微博列表

概述 我们要实现的效果: 这个界面布局也是UITableView实现的,其中的内容就是UITableViewCell,只是这个UITableViewCell是用户自定义实现的.虽然系统自带的UITableViewCell已经够强大了,但是这个界面布局并不能满足我们的需求. 在上面的cell布局里,我们可以知道,每个cell的高度都是不固定的.因此,我们通过代码来自定义cell. 代码自定义cell 步骤: 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:

IOS开发——UI进阶篇—UITableView,索引条,汽车数据展示案例

一.什么是UITableView 在iOS中,要实现展示列表数据,最常用的做法就是使用UITableViewUITableView继承自UIScrollView,因此支持垂直滚动,而且性能极佳 UITableView的两种样式UITableViewStylePlainUITableViewStyleGrouped 二.如何展示数据 UITableView需要一个数据源(dataSource)来显示数据 UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等 没有设置数据源的