【原】iOS:一种直接修改frame的某个属性的方法
发布日期:2021-09-02 02:17:02 浏览次数:1 分类:技术文章

本文共 2735 字,大约阅读时间需要 9 分钟。

在iOS中view的frame属性使用地太频繁了,尤其是调UI的时候。我们知道,正常情况下我们无法对frame的某个属性(x,y,width,height等)进行单独修改,比如:

someView.frame.x = 100;

这种方式是不允许的,但实际上我们更经常遇到的是frame的大部分元素值保持不变,只改变其中的一部分。相信这个烦恼困扰了不少人,于是我们不得不用以下两种方法去达到目的:

法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的语句非常长。简而言之,以上方法都不够“优雅”。那怎样才算优雅呢?我觉得如果我们能如下这样直接修改某个值就完美了:

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 
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)x14 {15     CGRect frame = self.frame;16     frame.origin.x = x;17     self.frame = frame;18 }19 20 - (CGFloat)x21 {22     return self.frame.origin.x;23 }24 25 - (void)setY:(CGFloat)y26 {27     CGRect frame = self.frame;28     frame.origin.y = y;29     self.frame = frame;30 }31 32 - (CGFloat)y33 {34     return self.frame.origin.y;35 }36 37 - (void)setOrigin:(CGPoint)origin38 {39     CGRect frame = self.frame;40     frame.origin = origin;41     self.frame = frame;42 }43 44 - (CGPoint)origin45 {46     return self.frame.origin;47 }48 49 - (void)setWidth:(CGFloat)width50 {51     CGRect frame = self.frame;52     frame.size.width = width;53     self.frame = frame;54 }55 56 - (CGFloat)width57 {58     return self.frame.size.width;59 }60 61 - (void)setHeight:(CGFloat)height62 {63     CGRect frame = self.frame;64     frame.size.height = height;65     self.frame = frame;66 }67 68 - (CGFloat)height69 {70     return self.frame.size.height;71 }72 73 - (void)setSize:(CGSize)size74 {75     CGRect frame = self.frame;76     frame.size = size;77     self.frame = frame;78 }79 80 - (CGSize)size81 {82     return self.frame.size;83 }84 85 86 @end

 

这种策略虽然简单,说破了就不值钱了,但是实用!希望这篇文章能帮大家打破思维定势,不要再被frame困扰!

=======================================================

原创文章,转载请注明 编程小翁@博客园,邮件zilin_weng@163.com,微信Jilon,欢迎各位与我在C/C++/Objective-C/机器视觉等领域展开交流!

 =======================================================

转载地址:https://blog.csdn.net/weixin_34130389/article/details/85707260 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[数分提高]2014-2015-2第3教学周第1次课
下一篇:重构机房收费系统需求分析之用例图

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月13日 21时57分42秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql构造器_MySQL行构造器表达式优化(Row Constructor Expression) 2019-04-21
2008日志清理 server sql_SQL Server 2008 清除日志 2019-04-21
mac mysql root 权限_Mac平台重新设置MySQL的root密码 2019-04-21
mysql新增一列_MySQL-ProxySQL中间件 2019-04-21
mysql 30入门_30分钟带你快速入门MySQL教程 2019-04-21
kangle主机怎么配置MySQL_kangle web服务+easypanel主机控制面板快速搭建网站和数据库以及管理空间详细教程... 2019-04-21
mysql 翻页 存储过程_MySQl通用翻页(存储过程) 2019-04-21
2020word替换所有文本_Excel字符函数(5):REPLACE、SUBSTITUTE查找替换函数之区别... 2019-04-21
win10安装ipython_win10环境 ipython app.py 8080 这里为什么是ipython 这步无法启动 2019-04-21
假定在MYSQL_假定在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义如下 - 问答库... 2019-04-21
mysql多字段存储过程_mysql 的存储过程_多字段 2019-04-21
python怎么创建字符串列表_如何在python列表中为每个字符串创建子列表? 2019-04-21
vba ado 执行多条mysql 语句_access 按钮 多条sql语句 VBA 2019-04-21
弹性方法计算连续梁板内力_(梁板结构)混凝土结构设计复习题及答案 2019-04-21
java root权限_android java获得root权限调用linux命令 | 学步园 2019-04-21
java最小化窗体_JAVA窗体最大化最小化控制+托盘 2019-04-21
java 注解 数组默认值_Java注解默认值 2019-04-21
java流程语句_Java流程控制语句 2021-06-24
java require_java正则中的requireEnd和hitEnd 2021-06-24
400错误java_java代码转化成c#代码 报400错误 2021-06-24