iOS给UIView添加常用的Extension

【iOS开发】——Category底层原理、Extension、关联对象 Category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其实都是指的Category。Category的主要作用是为已经存在的类添加方法。通常情况下我们可以把类的实现分开在几个不同的文件里面,这样做的好处是:除此之外,Category还有几个应用场景:所以关于方法的调用优先级: > > 。即,优先调用cateory中的方法,然后调用本类方法,最后调用父类方法。 注意⚠️:category是在运行时加载的,不是在编译时。Category的使用方法十分简单,如果感兴趣可以看看i 阅读详情

这个看个人习惯,不一定每个人的都一样。最好自己写一个,以后就用自己的。

#import <UIKit/UIKit.h>

@interface UIView (SetSize)

@property (nonatomic) CGFloat frameX;// ①x
@property (nonatomic) CGFloat frameY;// ②y
@property (nonatomic) CGFloat frameWidth;// width
@property (nonatomic) CGFloat frameHeight;// height
@property (nonatomic) CGFloat frameX_Width;// x + width(没有set方法)
@property (nonatomic) CGFloat frameY_Height;// y + height(没有set方法)

@property (nonatomic) CGFloat distance_right;// ③相对于父视图,距离右侧的距离
@property (nonatomic) CGFloat distance_bottom;// ④相对于父视图,距离底部的距离

@property (nonatomic) CGFloat centerX;// 中心点x
@property (nonatomic) CGFloat centerY;// 中心点y

@property (nonatomic) CGPoint origin;// origin
@property (nonatomic) CGSize size;// size

/**
 *  相对于①的set方法,同样是设置了x,但是这个方法的width也变了,而距离右侧的距离不变
 */
- (void)setFrameXWithRightUnchanged:(CGFloat)frameX;
/**
 *  相对于②的set方法,同样是设置了y,但是这个方法的height也变了,而距离底部的距离不变
 */
- (void)setFrameYWithBottomUnchanged:(CGFloat)frameY;
/**
 *  相对于③的set方法,同样是设置了距离右侧的距离,但是这个方法的width也变了,而x不变
 */
- (void)setDistance_rightWithFrameXUnchanged:(CGFloat)distance_right;
/**
 *  相对于④的set方法,同样是设置了距离底部的距离,但是这个方法的height也变了,而y不变
 */
- (void)setDistance_bottomWithFrameYUnchanged:(CGFloat)distance_bottom;

@end

#import "UIView+SetSize.h"

@implementation UIView (SetSize)

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



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



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



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



- (void)setFrameX_Width:(CGFloat)frameX_Width {
    
}
- (CGFloat)frameX_Width {
    return self.frame.origin.x + self.frame.size.width;
}



- (void)setFrameY_Height:(CGFloat)frameY_Height {
    
}
- (CGFloat)frameY_Height {
    return self.frame.origin.y + self.frame.size.height;
}



- (void)setDistance_right:(CGFloat)distance_right {
    CGRect frame = self.frame;
    frame.origin.x = self.superview.frame.size.width - self.frame.size.width - distance_right;
    self.frame = frame;
}
- (CGFloat)distance_right {
    return self.superview.frame.size.width - self.frame.origin.x - self.frame.size.width;
}



- (void)setDistance_bottom:(CGFloat)distance_bottom {
    CGRect frame = self.frame;
    frame.origin.y = self.superview.frame.size.height - self.frame.size.height - distance_bottom;
    self.frame = frame;
}
- (CGFloat)distance_bottom {
    return self.superview.frame.size.height - self.frame.origin.y - self.frame.size.height;
}



- (void)setCenterX:(CGFloat)centerX {
    CGPoint center = self.center;
    center.x = centerX;
    self.center = center;
}
- (CGFloat)centerX {
    return self.center.x;
}



- (void)setCenterY:(CGFloat)centerY {
    CGPoint center = self.center;
    center.y = centerY;
    self.center = center;
}
- (CGFloat)centerY {
    return self.center.y;
}



- (void)setOrigin:(CGPoint)origin {
    CGRect frame = self.frame;
    frame.origin = origin;
    self.frame = frame;
}
- (CGPoint)origin {
    return self.frame.origin;
}



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



- (void)setFrameXWithRightUnchanged:(CGFloat)frameX {
    CGRect frame = self.frame;
    frame.size.width -= frameX - frame.origin.x;
    frame.origin.x = frameX;
    self.frame = frame;
}
- (void)setFrameYWithBottomUnchanged:(CGFloat)frameY {
    CGRect frame = self.frame;
    frame.size.height -= frameY - frame.origin.y;
    frame.origin.y = frameY;
    self.frame = frame;
}
- (void)setDistance_rightWithFrameXUnchanged:(CGFloat)distance_right {
    CGRect frame = self.frame;
    frame.size.width -= distance_right - self.distance_right;
    self.frame = frame;
}
- (void)setDistance_bottomWithFrameYUnchanged:(CGFloat)distance_bottom {
    CGRect frame = self.frame;
    frame.size.height -= distance_bottom - self.distance_bottom;
    self.frame = frame;
}
@end


UIView分类 UIView+Extension 对view的一个扩展 立即下载

相关推荐

iOS UIView类 UIViewExt工具

iOS中,获取UI控件相关属性的工具类,方便获取控件的坐标(父视图),高宽等。

UIView+Extension方便在开发时快速修改视图的位置大小

把头文件放到你的整个项目的头文件中就可以了,在任何地方使用时是需要点出来就行   UIButton *btn = [[UIButton alloc] init];     btn.x = 100;     btn.y = 100;     btn.height = 50;     btn.width = 80;     btn.centerX = 200;     btn.cen

comeonword的博客 629

UIView扩展类

拖到工程就能用,纯代码屏幕适配

UIView+Extension"推出视图"

通过“UIView+Extension”来修改视图的的x,y,推出视图 这里“根”视图为UITableView“三问,1答”中,didSelectRowAtIndexPath方法来做 当点中某一行cell时 拿到要获取的控制器的对象,并使cell点击后,变为未选中状态 *//点中即消失 [tableView deselectRowAtIndexPath:indexPath ani

DemoFootMan的博客 498

UIViewExt.zip

Objective-C 获取屏幕宽高、左右距离等得工具类

IOS 开发之swift中UIView的扩展使用的实例

主要介绍了IOS 开发之swift中UIView的扩展使用的实例的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

iOS开发-UIView扩展CGRect

关于UIView的位置都会遇到,一般需要改变UIView的位置,需要先获取原有的frame位置,然后在frame上面修改,有的时候如果只是改变了一下垂直方向的位置,宽度和高度的一种,这种写法很麻烦。下面两种写法第二种明显更简单,如果需要实现第二种方法就需要扩展UIView。 //1 CGRect frame=self.testView.frame; frame.s...

weixin_34407348的博客 198

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题!

你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。

smart_boy__的博客 2960

iOS UIImage扩展方法(category):放大、旋转、合并UIImage、增加渐变层、添加阴影、调节透明度、保存到相册...

一有用的 UIImage 扩展,支持(等比例)放大和旋转可在许多 App 中使用。 UIImage-Extensions.h #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> CGFloat DegreesToRadians(CGFloat degrees); CGFloat RadiansT...

weixin_30532973的博客 181

海康工业相机SDK+OpenCV实战:图像采集与Mat格式转换优化指南

本文深入探讨了如何高效利用海康工业相机SDK与OpenCV进行图像采集与处理。重点解析了从相机RawData到OpenCV Mat格式转换的核心优化技巧,包括像素格式匹配、内存零拷贝管理以及彩色图像BGR/RGB转换,旨在解决工业应用中常见的性能瓶颈与内存问题,构建稳定高效的图像处理流程。

weixin_29192211的博客 108

SAP CO模块实战:成本中心会计分割结构配置全流程(OKES事务码详解)

本文详细解析了SAP CO模块中成本中心会计分割结构的配置全流程,重点讲解了OKES事务码的实战操作。内容涵盖分割结构的概念理解、配置前的次级成本要素与作业类型主数据准备,并通过步骤拆解演示了如何定义分割结构、规则与版本,以及如何将配置关联到成本中心并执行分割。最后提供了常见问题排查与优化建议,旨在帮助顾问及财务人员掌握成本精确分摊的关键配置,确保期末成本核算的准确性。

embedding5hiker的博客 805

iOS 中的Category 和 Extension

iOS 中的Category 和 Extension 的特点及用法 Category(分类): category即oc中通常称为分类/类别,主要作用有以下几点: 为已有的类添加方法,扩展功能; 可以实现多个开发者共同开发同一个类。 为单一的类文件减小文件大小。 可以将类的功能进行分类,不同的功能可以放在不同Category中。 按功能需求选择性加载不同的Category; 声明私有方法。 模拟o...

黎明的博客 1855

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 777

Swift Extension UIView+SP(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

weixin_38716347的博客 409

[特殊字符] 智能补货(AI-driven Replenishment)完整实施方案

补货量=预测需求+安全库存−当前库存补货量 = 预测需求 + 安全库存 - 当前库存补货量=预测需求+安全库存−当前库存。:基于 LSTM/Transformer 预测未来 30/60/90 天的销量。

nbsaas-boot基于Request-Response的企业级快速开发框架 968

【AI 编程工具】Codex配置部署指南

目录一、环境准备与基础安装1. 系统兼容性检查2. 前置依赖安装3. 安装方式选择二、API密钥配置与认证1. 获取API密钥2. 配置文件设置3. 临时配置方式三、沙盒环境配置与安全策略1. 沙盒模式选择2. 安全最佳实践四、高级功能配置1. 模型上下文协议(MCP)配置2. 模型版本切换3. 自定义网关配置五、常见问题排查1. 安装失败2. API调用失败3. 处理速度慢4. 配置文件不生效六、生产环境部署建议macOS/Linux:官方提供稳定支持,推荐使用原生环境Windows:官方标注为实验性支持

以实战经验介绍行业知识 2895

iOS8中Today Extension的使用

扩展(Extension)是iOS 8中引入的一个非常重要的新特性。扩展让app之间的数据交互成为可能。用户可以在app中使用其他应用提供的功能,而无需离开当前的应用。 iOS 8系统有6个支持扩展的系统区域,分别是Today、Share、Action、Photo Editing、Storage Provider、Custom keyboard。支持扩展的系统区域也被称为扩展点。对于赛事比分

ralbatr的专栏 1万+

windows下玩转vllm:在wsl下安装vllm

当前,部署通义千问2.5-vl已经是一件箭在弦上,不得不发的事儿了。网上搜了一下,发现还是用vllm用的比较多。于是乎,这就开始尝试部署vllm。但是我们之前说了,vllm是不支持直接在windows上部署的,我们还得搞wsl或者docker。咱今天先尝试使用wsl进行安装哈。

xiezhipu的博客 4137

swift关于UIView设置frame值的extension

swift关于UIView设置frame值的extension 使用 说明 1. 使用如上图,很简单,不再赘述 2. 在extension给添加的计算属性提供getter,setter方法即可 源码 // // UIView+SetRect.swift // YouXianMing // // Created by YouXia...

weixin_33877885的博客 1077

YOLOv10精度上不去?QAT量化感知训练全流程,INT8推理mAP只掉0.8%

普通PTQ量化虽简单,但无法应对YOLOv10的小目标特征和激活分布波动,导致精度暴跌。QAT通过“模拟量化误差+联合优化权重与量化参数”,让INT8模型精度接近FP16,同时速度提升1.8倍,完美适配实时检测场景(如安防监控、自动驾驶)。该流程已在工业级项目中验证,针对YOLOv10的优化策略(敏感层保护、小目标加权、分阶段训练)可直接迁移至其他YOLO系列(v8/v9),量化后精度损失均可控制在1%以内。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 916

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

iOS10通知及通知拓展Extension使用详解(附Demo)

1.1-iOS10拓展简介1.2-iOS10通知使用1.3-iOS10通知拓展Extension使用1.4-效果演示 如果对开发有兴趣的可以来黑马学习iOS开发:黑马程序员 源代码下载地址:Deme下载 1.1-iOS10拓展简介 iOS10系统最大的一个亮点就是增加了系统应用的拓展功能ExtensionExtension功能可以理解为自定义系统界面 本小节我们就以自定义系统通知界面来学习一下Ext

坤小的专栏 6664

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

swift为UIView添加extension扩展frame

添加swift file:UIView+Extension import UIKit extension UIView { // x var x : CGFloat { get { return frame.origin.x } ...

weixin_33757609的博客 219

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Swift Extension UIView获取Rect值(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

weixin_38716347的博客 309

Swift Extension UIView+Frame(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

weixin_38716347的博客 196

NVKE NKTP Helm 依赖详解:OpenTelemetry Operator、node-exporter 与 metrics-server 的托管与接管策略

NVKE 的可观测性管道 NKTP(NVKE telemetry pipeline)并不从零构建 Operator、主机指标采集器和资源指标 API,而是以 Helm 依赖的方式托管三个上游 Chart,并把版本固定下来。本文以 NKTP 的依赖说明文档 [dependencies.md](https://link.gitcode.com/i/e920f49e8be520397698636b8d0

gitblog_00180的博客 481
上一篇: iOS获取设备唯一的UUID(解决删除应用UUID变更的问题)
下一篇: iOS开发学习线路图
中国摩西
博客等级 码龄12年 37粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值