让结构体类型frame的某个属性可以直接修改
本篇是是本人在博客园写的第一篇博客,前几天因为种种原因最终决定离开混了几年的csdn。希望在博客园有个新的开始
Foundation框架里面的frame是大家最熟悉不过的一个属性了,但是修改起来比较麻烦,他是CGRect类型的CGRect是结构体 结构体类型里面的某个属性如果想要修改是不允许单个修改的,必须像下面这样先取出,改一下再重新赋值回去,也就是大家常说的三部曲

如果结构体类型的东西也可以直接修改 那会有多爽?就像下面这样。

其实只要自己给UIView写个分类就好了 用这个分类来替代frame。
大概思想就是给用分类给UIView多增加几个属性x,y,height,width。这几个属性都分别实现get方法和set方法。这样以后frame就可以离开他了
分类UIView+Frame 声明
//
// UIView+Frame.h
// SXDownLoader
//
// Created by 董尚先 on 15/1/2.
// Copyright (c) 2015年 shangxianDante. All rights reserved.
// #import <UIKit/UIKit.h> @interface UIView (Frame) // 自己模仿frame写出他的四个属性
@property (nonatomic, assign) CGFloat x;
@property (nonatomic, assign) CGFloat y;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat height; @end
分类UIView+Frame 实现
#import "UIView+Frame.h" @implementation UIView (Frame) - (void)setX:(CGFloat)x
{
CGRect frame = self.frame;
frame.origin.x = x;
self.frame = frame;
} - (CGFloat)x
{
return self.frame.origin.x;
} - (void)setY:(CGFloat)y
{
CGRect frame = self.frame;
frame.origin.y = y;
self.frame = frame;
} - (CGFloat)y
{
return self.frame.origin.y;
} - (void)setWidth:(CGFloat)width
{
CGRect frame = self.frame;
frame.size.width = width;
self.frame = frame;
} - (CGFloat)width
{
return self.frame.size.width;
} - (void)setHeight:(CGFloat)height
{
CGRect frame = self.frame;
frame.size.height = height;
self.frame = frame;
} - (CGFloat)height
{
return self.frame.size.height;
} @end
之后在需要的地方Import一下
就可以把那些UI控件什么的frame轻松的单个修改了

让结构体类型frame的某个属性可以直接修改的更多相关文章
- OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改
		OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改,需要对OC对象的结构体属性整体赋值. 关于网上很多博客写着“结构体类型里面的某个属性如果想要修改是不允许单个修改的” 之解释: ... 
- 你好,C++(14)如何描述“一个名叫陈良乔,年龄33岁,身高173厘米,体重61.5千克的男人”——3.8  用结构体类型描述复杂的事物
		3.8 用结构体类型描述复杂的事物 利用C++本身所提供的基本数据类型所定义的变量,只能表达一些简单的事物.比如我们可以用int类型定义nAge变量表示人的年龄,用string类型定义strName ... 
- Go语言规格说明书 之 结构体类型(Struct types)
		go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ... 
- 张超超OC基础回顾03_结构体类型作为成员变量的特殊用法
		直接上例子: 要求: 合理的设计一个”学生“类 学生有* 姓名* 生日两个属性和说出自己姓名生日方法 要求利用设计的学生类创建学生对象,并说出自己的姓名和年龄 描述学生类 事物名称: 学生(Stud ... 
- typedef和自定义结构体类型
		在自定义结构体类型时会用到typedef关键字.大家都知道typedef是取别名的意思,在C语言中跟它容易混淆的有const,#define等,其区别不在本篇文章讨论之列. /*定义单链表结点类型*/ ... 
- C语言中的系统时间结构体类型
		在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:0 ... 
- go语言进阶之为结构体类型添加方法
		1.为结构体类型添加方法 示例: package main import "fmt" type Person struct { name string //名字 sex byte ... 
- 自定义数据类型   C++  结构体类型  共同体类型  枚举类型  类类型{}
		一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct St ... 
- 结构体类型重声明导致的bug一个
		bug前提条件 当模块比較多.头文件较多,某个结构体类型会在当前模块中又一次声明进而引用其成员,而不直接包括其它模块的头文件. 这种优点是不引入不须要的类型声明到此模块.头文件包括的交叉:坏处是,添加 ... 
随机推荐
- 【Swift学习】Swift编程之旅---类和结构体(十三)
			与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ... 
- SpringMVC——自定义拦截器、异常处理以及父子容器配置
			自定义拦截器: 一.若想实现自定义拦截器,需要实现 org.springframework.web.servlet.HandlerInterceptor 接口. 二.HandlerIntercepto ... 
- 使用Python对Excel表格进行简单的读写操作(xlrd/xlwt)
			算是一个小技巧吧,只是进行一些简单的读写操作.让人不爽的是xlrd和xlwt是相对独立的,两个模块的对象不能通用,读写无法连贯操作,只能单独读.单独写,尚不知道如何解决. #①xlrd(读) #cod ... 
- 一个ajax同步与异步引发的血案。
			前言 公司做网上促销活动,需要充值换取相应的抽奖资格,抽奖可以获得丰厚的礼品,而且抽奖资格门槛有点高,领导下达命令保证活动的正常上线与运行,领导很重视,就这样,在领导的安排下进行了相关活动的codin ... 
- C#生成验证码
			生成验证码的类: using System; using System.Collections.Generic; using System.Drawing; using System.Text; na ... 
- Java NIO:NIO概述
			Java NIO:NIO概述 在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题.NIO是Java 4里面提供的新的API,目的是用来解决传统IO的问题.本文下面分别从Java ... 
- 2016 .net 招聘
			职位月薪:面议 工作地点:成都 发布日期:2016-02-23 工作性质:全职 工作经验:1-3年 最低学历:大专 招聘人数:5人 职位类别:软件工程师 岗位职责: 1. 负责项目或产品的开发.单 ... 
- Mysql 大小写问题
			今天发布程序的时候,日志报错找不到表,但是系统中已经存在表,最后发现是sql大小写的问题,mysql默认设置导致这些执行失败. 1.用ROOT登录,修改/etc/my.cnf 2.在[mysqld]下 ... 
- css background 背景图设置
- 解决SqlPlus前台程序出现中文乱码的问题
			在使用sqlplus的过程中,常常会遇到某一台机器在访问oracle数据库时中文显示乱码的问题,实际上这是因为客户端字符集和服务器字符集不一致导致的.在实际使用中,服务器字符集,客户端字符集和操作系统 ... 
