【原】iOS:一种直接修改frame的某个属性的方法

简介:

在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困扰!

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/p/4359865.html,如需转载请自行联系原作者

相关文章
|
7月前
|
移动开发 前端开发 数据安全/隐私保护
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
206 0
|
7月前
|
存储 监控 iOS开发
iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法
在iOS应用开发过程中,调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时,我们可以连接电脑并使用Xcode Console等工具来查看日志。然而,这种方式可能不够方便,并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了极大的便利,本文将详细介绍其功能和使用方法。 克魔助手会提供两种日志,一种是实时的,一种的是崩溃的。(由于崩溃日志的环境很麻烦,目前只展示实时日志操作步骤)
|
7月前
|
存储 iOS开发 开发者
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
105 0
|
9天前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
18 2
|
4月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
3月前
|
iOS开发 UED 开发者
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
97 9
|
4月前
|
iOS开发
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
201 0
App备案与iOS云管理式证书 ,公钥及证书SHA-1指纹的获取方法
|
4月前
|
Swift iOS开发
iOS开发-属性的内存管理
【8月更文挑战第12天】在iOS开发中,属性的内存管理至关重要,直接影响应用性能与稳定性。主要策略包括:`strong`(强引用),不维持对象生命期,可用于解除循环引用;`assign`(赋值),适用于基本数据类型及非指针对象属性;`copy`,复制对象而非引用,确保对象不变性。iOS采用引用计数管理内存,ARC(自动引用计数)自动处理引用增减,简化开发。为避免循环引用,可利用弱引用或Swift中的`[weak self]`。最佳实践包括:选择恰当的内存管理策略、减少不必要的强引用、及时释放不再使用的对象、注意block内存管理,并使用Xcode工具进行内存分析。
|
7月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
414 0
|
6月前
|
前端开发 iOS开发
input框设置placeholder属性在iOS中显示不完整
input框设置placeholder属性在iOS中显示不完整
78 1