IOS 杂笔-12(类别de巧用 有便于Frame的操作)

在实际开发中很多时候我们都为了控件frame的操作焦头烂额。

例如:我们只想要获取view的width。

我们可以这么操作:view.frame.size.width

有时我们想要改变view的width然而我们不能直接改变->需要三部曲。

让人抓狂,为了解决这里烦恼我们可以通过改变类别来达到理想的效果。

下面是类别的.h文件:

//
//  UIView+CXExtension.h
////
//  Created by ma c on 16/3/25.
//  Copyright ? 2016年 xubaoaichiyu. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIView (CXExtension)

@property (nonatomic, assign) CGSize size;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) CGFloat x;
@property (nonatomic, assign) CGFloat y;

@end

接下来是.m文件

//
//  UIView+CXExtension.m
////
//  Created by ma c on 16/3/25.
//  Copyright ? 2016年 xubaoaichiyu. All rights reserved.
//

#import "UIView+CXExtension.h"

@implementation UIView (CXExtension)

- (void)setSize:(CGSize)size
{
    CGRect frame = self.frame;
    frame.size = size;
    self.frame = frame;
}

- (CGSize)size
{
    return self.frame.size;
}

- (void)setWidth:(CGFloat)width
{
    CGRect frame = self.frame;
    frame.size.width = width;
    self.frame = frame;
}

- (void)setHeight:(CGFloat)height
{
    CGRect frame = self.frame;
    frame.size.height = height;
    self.frame = frame;
}

- (void)setX:(CGFloat)x
{
    CGRect frame = self.frame;
    frame.origin.x = x;
    self.frame = frame;
}

- (void)setY:(CGFloat)y
{
    CGRect frame = self.frame;
    frame.origin.y = y;
    self.frame = frame;
}

- (CGFloat)width
{
    return self.frame.size.width;
}

- (CGFloat)height
{
    return self.frame.size.height;
}

- (CGFloat)x
{
    return self.frame.origin.x;
}

- (CGFloat)y
{
    return self.frame.origin.y;
}

@end

复制粘贴即可使用,也可以改变为其他控价。

时间: 2024-10-03 22:54:46

IOS 杂笔-12(类别de巧用 有便于Frame的操作)的相关文章

IOS 杂笔-19(属性与变量的优缺点)

IOS 杂笔-19(属性与变量的优缺点) 在前面的文章中我介绍了属性与变量的区别.这篇博客我将会简单介绍一下属性与变量的优缺点. 变量 优点: 访问速度快 缺点: 使用不灵活 属性 缺点: 耗时 优点: 防止对象被提前创建 防止对象重复创建 防止对象使用时,还没被创建 可以在懒加载方法里面,进行初始化操作

IOS杂笔- 7(类方法load与initialize的区别 浅析)

在介绍两种类方法之前,NSObject Class Reference里对这两个方法说明: +(void)initialize The runtime sends initialize to each class in a program exactly one time just before the class, or any class that inherits from it, is sent its first message from within the program. (Th

IOS 杂笔-13(appearance的巧妙使用)

NSDictionary * attrs = @{ NSFontAttributeName:[UIFont systemFontOfSize:13], NSForegroundColorAttributeName:[UIColor grayColor] }; NSDictionary * selectAttrs = @{ NSFontAttributeName:[UIFont systemFontOfSize:12], NSForegroundColorAttributeName:[UIColo

IOS 杂笔-11(实现在外部无法改变UIView的size)

我想题目说的或许不是很清楚,那么现在我详细介绍一下这篇随笔内容. 在外部无法改变UIVIew控件的size. 这里说是UIView,但是事实上,是大多数控件而绝非仅UIView. 想要实现在外部无法改变size该怎么做呢. 首先是重写setFrame使其规定本身size,如下 // // TestView.m // CX-实现在外部无法改变UIView的Size // // Created by ma c on 16/3/25. // Copyright ? 2016年 xubaoaichiyu

IOS 杂笔-14(被人遗忘的owner)

*owner在开发中现在已经很少用了 有兴趣的童鞋可以看看* 我们遇到owner通常是在类似 [[[NSBundle mainBundle] loadNibNamed:@"Food" owner:nil options:nil]lastObject ]中遇到的. 我们一般的做法是直接把owner设置为self(通常是咋自定义cell时). 但是在定义其他控件时我们就需要想一想为什么,或者还有什么需要注意的. 下面我开始对owner进行介绍. 先仔细观察下面gif的内容: 不难发现,我在

IOS 杂笔-17(堆区栈区等)

栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方式类似于数据结构中的栈,即后进先出.先进后出的原则. 例如:在函数中申明一个局部变量int b;系统自动在栈中为b开辟空间. 堆区(heap):一般由程序员申请并指明大小,最终也由程序员释放.如果程序员不释放,程序结束时可能会由OS回收.对于堆区的管理是采用链表式管理的,操作系统有一个记录空闲内存地址的链表,当接收到程序分配内存的申请时,操作系统就会遍历该链表,遍历到一个记录的内存地址大于申请

IOS 杂笔-16 (-(void)scrollViewDidEndScrollingAnimation:方法使用注意)

今天在写项目的时候,遇到了一件令人抓狂的事情. 正如标题所示,被这个方法弄的团团转. -(void)scrollViewDidEndScrollingAnimation:是协议里的方法. 意味当动画结束时调用. 动画?为什么会有动画呢? setContentOffset: animated: -这一方法是有动画的 按照平时的习惯 在animated后我设置了NO 这一设置没什么关系. 彻底击碎了我的心,当我调试bug时根本没有想到回事这里的bug. 之所以发现这里是因为我发现在-(void)sc

IOS 杂笔-8(loadView、viewDidLoad、viewWillAppear、viewDidAppear等简介)

loadView; This is where subclasses should create their custom view hierarchy if they aren't using a nib. Should never be called directly.这是当他们没有正在使用nib视图页面,子类将会创建自己的自定义视图层.绝不能直接调用. ------------viewDidLoad;Called after the view has been loaded. For vi

iOS 杂笔-如何解决tableview显示错乱问题

解决自定义Tableviewcell显示错乱问题 要是要解决这个问题,就需要用到UITableviewCell的prepareForReuse方法 cell被重用如何提前知道? 重写cell的prepareForReuse 官方头文件中有说明.当前已经被分配的cell如果被重用了(通常是滚动出屏幕外了),会调用cell的prepareForReuse通知cell.注意这里重写方法的时候,注意一定要调用父类方法[super prepareForReuse] .这个在使用cell作为网络访问的代理容