ios 中直接修改frame里边某个属性的简便方法
参考:http://www.cnblogs.com/wengzilin/p/4359865.html
在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候。我们知道,正常情况下我们无法对frame的某个属性(x,y,width,height等)进行单独修改,比如:
|
1
|
someView.frame.x = 100; |
这种方式是不允许的,但实际上我们更经常遇到的是frame的大部分元素值保持不变,只改变其中的一部分。相信这个烦恼困扰了不少人,于是我们不得不用以下两种方法去达到目的:
|
1
2
3
4
5
6
7
8
|
法1:CGRect frame = someView.frame;frame.x =100;frame.width = 200;someView.frame = frame;法2:someView.frame = CGRectMake(100, XXX, 200, XXX); |
法2看起来也很精简,但实际上也很麻烦,因为实际应用场景中x, y, width, height四个值都是依赖别的变量,导致法2的语句非常长。简而言之,以上方法都不够“优雅”。那怎样才算优雅呢?我觉得如果我们能如下这样直接修改某个值就完美了:
|
1
2
|
someView.x = 100;someView.width = 200; |
我们跳过someView的frame属性,直接修改了我们想要的元素值。幸运的是,我们使用category可以相当方便地达到目的,这是一件一劳永逸的事情,引入一次category后整个工程都可以使用这种修改方法:
1 //
2 // UIView+Frame.h
3 // WZLCodeLibrary
4 //
5 // Created by wzl on 15/3/23.
6 // Copyright (c) 2015年 Weng-Zilin. All rights reserved.
7 //
8
9 #import <UIKit/UIKit.h>
10
11 @interface UIView (Frame)
12
13 @property (nonatomic, assign) CGFloat x;
14 @property (nonatomic, assign) CGFloat y;
15 @property (nonatomic, assign) CGFloat width;
16 @property (nonatomic, assign) CGFloat height;
17 @property (nonatomic, assign) CGPoint origin;
18 @property (nonatomic, assign) CGSize size;
19
20 @end
1 //
2 // UIView+Frame.m
3 // WZLCodeLibrary
4 //
5 // Created by wzl on 15/3/23.
6 // Copyright (c) 2015年 Weng-Zilin. All rights reserved.
7 //
8
9 #import "UIView+Frame.h"
10
11 @implementation UIView (Frame)
12
13 - (void)setX:(CGFloat)x
14 {
15 CGRect frame = self.frame;
16 frame.origin.x = x;
17 self.frame = frame;
18 }
19
20 - (CGFloat)x
21 {
22 return self.frame.origin.x;
23 }
24
25 - (void)setY:(CGFloat)y
26 {
27 CGRect frame = self.frame;
28 frame.origin.y = y;
29 self.frame = frame;
30 }
31
32 - (CGFloat)y
33 {
34 return self.frame.origin.y;
35 }
36
37 - (void)setOrigin:(CGPoint)origin
38 {
39 CGRect frame = self.frame;
40 frame.origin = origin;
41 self.frame = frame;
42 }
43
44 - (CGPoint)origin
45 {
46 return self.frame.origin;
47 }
48
49 - (void)setWidth:(CGFloat)width
50 {
51 CGRect frame = self.frame;
52 frame.size.width = width;
53 self.frame = frame;
54 }
55
56 - (CGFloat)width
57 {
58 return self.frame.size.width;
59 }
60
61 - (void)setHeight:(CGFloat)height
62 {
63 CGRect frame = self.frame;
64 frame.size.height = height;
65 self.frame = frame;
66 }
67
68 - (CGFloat)height
69 {
70 return self.frame.size.height;
71 }
72
73 - (void)setSize:(CGSize)size
74 {
75 CGRect frame = self.frame;
76 frame.size = size;
77 self.frame = frame;
78 }
79
80 - (CGSize)size
81 {
82 return self.frame.size;
83 }
84
85
86 @end
这种策略虽然简单,说破了就不值钱了,但是实用!希望这篇文章能帮大家打破思维定势,不要再被frame困扰!
ios 中直接修改frame里边某个属性的简便方法的更多相关文章
- 【原】iOS:一种直接修改frame的某个属性的方法
在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候.我们知道,正常情况下我们无法对frame的某个属性(x,y,width,height等)进行单独修改,比如: someView.f ...
- iOS UIView 快速修改 frame,
在iOS开发布局修改 frame 时需要繁琐的代码实现,今天偶尔看到一播客说到快速修改的 frame 的方法,自己动手写了一遍实现代码. 快速实现主要通过 添加类目的方式,对UIView 控件添加了一 ...
- Eclipse中SVN修改的*星号没了,解决方法
Eclipse中SVN修改的*星号没了,解决方法 打开Preference 第一步:去掉外加的 ">" 第二步:勾选Outgoing changes 这样做之后," ...
- iOS UIView 快速修改 frame
我们修改frame中的某个值,需要进行繁琐的书写,例如: (1). 直接设置位置大小 view.frame = CGRectMake(0, 0, 320, 150); (2). 只修改某个值 view ...
- iOS中的成员变量,实例变量,属性变量
在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyV ...
- IOS中bounds和frame
* 用bounds和frame来修改尺寸是有一些小区别的 三.isEqual:方法 1> 系统会根据对象isEqual方法的返回值来决定两个对象是否相同 * 比如判断对象a和b是否相同,就会查看 ...
- 一句话搞定IOS中View的Frame和Bound
就一句话,Frame是父View上看到子View的窗户,Bound是子View上可以被父View看见的内容. 稍微解释下.Frame 指子View在父View中的位置以及大小.由两部分构成,第一部分是 ...
- iOS中navigationItem修改标题的颜色
UIColor * color = [UIColor redColor];//这里我们设置的是颜色,NSDictionary * dict = [NSDictionary dictionaryWith ...
- VS中查看/修改Dialog控件TAB顺序的方法
打开资源视图,打开Dialog的编辑界面 查看: 格式>Tab键顺序 修改: 格式>Tab键顺序 用鼠标左键按你想要的顺序点击各个控件的TAB标签,就设定了 那些你想要TAB键能选择到的控 ...
随机推荐
- Perl 正则表达式
匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)替换:s/<pattern>;/<replacement>;/转化: ...
- HTML5 之Canvas绘制太阳系
<!DOCTYPE html> <html> <head> <title>HTML5_Canvas_SolarSystem</title> ...
- 【bzoj1596】[Usaco2008 Jan]电话网络
题目描述 Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来 ...
- 牡丹江.2014B(图论,树的直径)
B - Building Fire Stations Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%lld & ...
- [原创]svn 常见错误总结
错误: Unable to make name in 'X:\nfs\drivers\can_uart\.svn\tmp' 解决: 改变当前文件夹的权限 linux 下显示修改的文件名 参考链接:ht ...
- iOS中AOP与Method Swizzling 项目中的应用
引子:项目中需要对按钮点击事件进行统计分析,现在项目中就是在按钮的响应代码中添加点击事件,非常繁琐.所以使用了AOP(面向切面编程),将统计的业务逻辑统一抽离出来. 项目中添加的开源库:https:/ ...
- jsp+servlet
- MySQL 同主机不同数据库之间的复制
MySQL同主机不同数据库的复制命令:注意运行在Terminal中,不运行在MySQL命令行中. mysqldump Portal_DEV -u root -ppassword1 --add-drop ...
- 剑指Offer 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路: 这个题是想得到一个时间复杂度为O(1)的min函数,所以应用一个辅助栈,压的时候,如果A栈的压入比B栈压入 ...
- ListView滑动位置精准记忆
需求场景:一个ListView页面,滑动阅读到某一位置,然后退出页面,下次再进入页面的时候,想要直接滑动到上次阅读的位置. 方案1:页面退出的时候,ListView.getFirstVisiblePo ...