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键能选择到的控 ...
随机推荐
- hadoop安装实战(mac实操)
集群环境配置参考(http://blog.csdn.net/zcf1002797280/article/details/49500027) 参考:http://www.cnblogs.com/liul ...
- solr
一.启动命令 tar -zxvf solr-.tgz cd solr-\example java -jar start.jar 默认监听8983端口 java -Djetty.port= -jar s ...
- 读取XML文件
首先要确定好XML文件的位置,最好是放在程序的debug文件中,放在其他地方也可以,要写上绝对路径 using System; using System.Collections.Generic; us ...
- SMTP协议--在cmd下利用bat命令行发送邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 选择‘开始’-‘运行’,输入cmd,进入命令提示符窗口. Windows7默认没有开始Telnet服务,请在运 ...
- 如何使用coding.net
由于我有一位十分聪明能干的室友会使用coding.net,于是我决定奉献一下室友的智慧,告诉大家如何使用conding.net上交作业.(如有说错的地方希望大家可以指出来) 首先登陆codin ...
- 跟着百度学PHP[4]-OOP面对对象编程-1-什么是面对对象编程
该阶段学习参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html 面向对象编程(Object Orie ...
- CookieStore之Cookie的获取与保存
Set<Cookie> allCookies = driver.manage().getCookies(); try { CookieStore cookiestore = new Bas ...
- (C语言)精髓——指针
(1)作用:正确而灵活的运用指针,能够有效的表示复杂的数据结构,能动态分配内存,方便地使用字符串,有效而方便地使用数组,可以直接处理内存单元地址. (2)概念:①变量的指针:变量(3)的地址.(200 ...
- midi格式
http://www.ccarh.org/courses/253/handout/smf/
- Aufs与Devicemapper的关系
Aufs与Devicemapper的应用 Aufs是Docker最初采用的文件系统,由于Aufs未能加入到Linux内核,考虑到兼容性问题,加入了Devicemapper的支持.目前,除少数版本如Ub ...