UIView 中常见的方法总结

iOS UIView动画效果详解及示例代码 在iOS中,UIView动画使用的是块动画(Block-based Animation)的方式,即通过block语法来定义动画的开始和结束状态。在动画过程中,系统会自动地根据起始状态和结束状态之间的差异来计算出动画的中间状态,从而实现平滑的过渡效果。同时,为了实现更复杂的动画效果,开发者可以结合UIView的其他属性和方法进行操作,例如使用关键帧动画、动画组等。同时,UIView动画还支持设置动画的持续时间、重复次数、延迟等参数,以及添加动画的过渡效果。在动画完成后,会执行指定的完成处理代码,这里通过。 阅读详情

addSubview: 

添加一个子视图到接收者并让它在最上面显示出来。 
- (void)addSubview:(UIView *)view 
讨论 
这方法同样设置了接收者为下一个视图响应对象。接收者保留视图。如果你使用removeFromSuperview方法用来把视图移除他的显示列表,那么视图将会被释放。如果你想要在视图移除显示列表後保留并使用这个视图(如果,举个例子,你想要交换一些视图的位置。),你不许保留那个视图在他调用removeFromSuperview前。 

bringSubviewToFront: 
把指定的子视图移动到顶层 
- (void)bringSubviewToFront:(UIView *)view 
参数 
view 
需要移到顶层的视图 

convertPoint:fromView: 
把一个点从一个坐标系转换到接收者的坐标系 
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view 
参数 
point 
一个视图中坐标系上的点 
view 
一个视图包含了点和他自身坐标系。如果是图是nil,那么这个方法将尝试转换基于窗口的坐标系。否则视图和那个接收者必须属于同一个UIWindow对象。 
返回值 
一个转换到接收者坐标系的点 

convertPoint:toView: 
转换一个点从接收者坐标系到给定的视图坐标系 
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view 
参数 
point 
一个在调用者坐标系中的点 
view 
一个包含了需要被转换的点的视图。如果视图是nil,那么这个方法将会转换成基于窗口的坐标。否则视图和接收者都要属于同一个UIWindow对象。 
返回值 
基于视图的坐标系转换过的点 

convertRect:fromView: 
转换一个矩形从其他视图坐标系到接收者坐标系。 
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view 
参数 
rect 
一个在视图坐标系中的矩形 
view 
一个视图内部有矩形在他的坐标系中。如果视图是nil,那么这个方法将会基于窗口来转换。否则视图和接收者必须都属于同一个UIWindow对象 
返回值 
The converted rectangle 
转换过的矩形 

convertRect:toView: 
转换接收者坐标系中的矩形到其他视图 
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view 
参数 
rect 
一个在接收者坐标系中的矩形 
view 
要转换过去的目标视图对象。如果这个是视图是nil,这个方法将会基于窗口坐标系来转换。否者视图和接收者必须属于同一个UIwindow对象 
返回值 
一个转换过的矩形 

didAddSubview: 
告诉视图当子视图已经添加 
- (void)didAddSubview:(UIView *)subview 
参数 
subview 
被添加做子视图的视图对象 
讨论 
被子类重写用来执行额外的命令当子视图添加到接收者。这个方法被addSubview调用 

didMoveToSuperview 
通知接收者父视图已经改变(nil是允许的) 
- (void)didMoveToSuperview 
讨论 
默认不做任何事情;子类可以重写这方法来作为特定的实现 

didMoveToWindow 
通知接收者它一斤给添加到窗口中 
- (void)didMoveToWindow 
讨论 
默认实现不做任何事情;子类可以重写这个方法来做特殊的实现 
窗口的属性有可能是nil当这个方法调用的时候,这表明接收者并不属于当然任何一个窗口。这个只发生在接收者从它的父视图上移除或者接收者添加到父视图中而不是添加到window中。重写这个方法可以用来选择忽略一些他们不关心的对象 

drawRect: 
在接收者视图中绘制矩形 
- (void)drawRect:(CGRect)rect 
参数 
rect 
一个定义的需要绘制的矩形 
讨论 
子类重写这个方法如果他们确实要绘制他们自定义的视图。如果子类是其他视图的容器那么它不需要重写这个方法。默认的实现不做任何事情。如果你自定义的视图是一个UIView子类,你不需要去调用它的父类实现。注意如果它的父类实现绘制并且不透明属性为YES那么每一个子类都需要填充矩形。 
当这个方法被调用,接收者可以假定他的帧在坐标上已经转换,边界矩形已经应用;所有他要做的就是绘制自定义的方法。使用UIGraphicsGetCurrentContext方法去获取当前图形内容用来绘制,坐标原点在左上角。不要保留图片内容当他可以被drawRect:这个方法调用。 
exchangeSubviewAtIndex:withSubviewAtIndex: 
交换接收者的子视图和给定的索引视图 
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2 
参数 
index1 
一个需要取代索引2的子视图 
index2 
一个需要取代索引1的子视图 

hitTest:withEvent: 
返回接收者视图层次中最远的派生(包括它本身)的特定的点。 
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
参数 
point 
接收者坐标系中的点 
event 
触发这个方法的事件或者是如果这个方法被预调用就返回nil 
返回值 
一个视图对象最远的派生点。如果这个点位于接收者之外就返回nil 
讨论 
这个方法贯穿视图的层次发送pointInside:withEvent: 消息到每一个子视图用来决定那个子视图需要接收触摸事件。如果pointInside:withEvent: 返回YES,那么视图的层次全部贯穿;否则视图层次的分支是被否定的。你不太需要调用这个方法,但是你需要重写它用来隐藏子视图的触摸事件。 
如果视图是隐藏的,禁止用户交互的或者透明值小于01那么这个方法不可用 

initWithFrame: 
初始化并返回一个新的拥有特定帧矩形的视图对象 
- (id)initWithFrame:(CGRect)aRect 
参数 
aRect 
一个帧矩形用来创建视图对象。原始的帧在它的父视图的坐标系中。设置这个属性用来改变中心和边界属性。 
返回值 
一个初始化的视图对象,如果没有被创建那就返回nil 
讨论 
一个新的视图对象必须添加到视图链中才能使用。这个方法为UIView类指出初始化对象。 

insertSubview:aboveSubview: 
在视图层次顶层插入一个视图 
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview 
参数 
view 
一个插入被用来放在顶层的视图。它将会从父视图中移除如果它不是相邻视图 
siblingSubview 
一个相邻视图用来放在插入视图的後面 

insertSubview:atIndex: 
插入视图到指定的索引 
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index 
参数 
view 
插入的视图,这个值不能是nil 
index 
子视图索引从0开始并且不能大于子视图的数量 

insertSubview:belowSubview: 
插入视图到显示链的底层 
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview 
参数 
view 
一个需要插入到其他视图底部的视图。它将从它的父视图移除如果它不与相邻视图的相邻 
siblingSubview 
一个相邻视图将会在插入的视图之上 

isDescendantOfView: 
返回一个布尔值指出接收者是否是给定视图的子视图或者指向那个视图 
- (BOOL)isDescendantOfView:(UIView *)view 
参数 
view 
一个视图用来测试子视图在视图层次中的关系 
返回值 
如果接收者是视图的子视图就返回YES,或者视图就是接收者;否则就是NO 

layoutIfNeeded 
排列子视图如果需要的话 
- (void)layoutIfNeeded 
讨论 
使用这个方法来关注子视图的排列在绘制前 

layoutSubviews 
排列子视图 
- (void)layoutSubviews 
讨论 
当layoutIfNeeded被调用是子类用来重写这个方法来排列子视图。默认实现这个方法不做任何事情。 

pointInside:withEvent: 
返回一个布尔值指出接收者是否包含特定的点 
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
参数 
point 
一个在接收者坐标系内的点 
event 
这个方法的目标事件或者如果这个方法被预调用返回nil 
返回值 
如果点在接收者边界内返回YES,否则返回NO 

removeFromSuperview 
把接收者从它的父视图或者窗口移除,并在响应链中移除。 
- (void)removeFromSuperview 
讨论 
接收者同时释放;如果你计划重用它,要确定在发送消息前保持它并在添加到其他UIView对象作为子视图後移除。 不要在显示的时候调用 

sendSubviewToBack: 
移动指定的子视图到它相邻视图的後面 
- (void)sendSubviewToBack:(UIView *)view 
参数 
view 
一个子视图用来移动到它後面去 

setNeedsDisplay 
控制接收者的边界矩形被标记为需要显示 
-(void)setNeedsDisplay 
讨论 
默认情况下,视图几何图形的改变自动重绘而不需要调用drawRect:方法。因此,你需要去请求视图重绘当视图的数据或者状态改变的时候。从这个意义上来说,向视图发送setNeedsDisplay消息。任何UIView对象标记为需要显示後将会在应用程序循环中自动重新绘制。 

setNeedsDisplayInRect: 
标记接收者中的特定的矩形区域为需要显示,或者添加接收者现有的其他无效区域 
- (void)setNeedsDisplayInRect:(CGRect)invalidRect 
参数 
invalidRect 
标记接收者的矩形区域为无效的;他需要在接收者坐标系中定义。 
讨论 
默认情况下,视图几何图形的改变自动重绘而不需要调用drawRect:方法。因此,你需要去请求视图重绘当视图的数据或者状态改变的时候。使用这个方法或者用setNeedsDisplay方法来标记视图需要显示的地方。 

setNeedsLayout 
设置当子视图显示的时候需要重新排列 
- (void)setNeedsLayout 
讨论 
如果你调用这个方法在下一个显示方法之间,那么layoutIfNeeded排列子视图;否则将不会做任何事情 

sizeThatFits: 
计算并返回一个最好的适应接收者子视图的大小 
- (CGSize)sizeThatFits:(CGSize)size 
参数 
size 
接收者首选的尺寸 
返回值 
一个新的大小用来适应接收者子视图 
讨论 
默认的实现返回大小参数 子类重写这个方法用来返回特定视图的大小。举个粒子,UISwitch返回一个修正过的大小,UIImageView返回图片的大小 这个方法并没有改变接收者的大小 

sizeToFit 
调整大小并移动接收者视图大小所以他包含了他的子视图 
- (void)sizeToFit 
讨论 
这个方法使用sizeThatFits: 方法来决定大小。子类需要重写sizeThatFits:用来计算正确的尺寸大小。默认的实现不做任何事情。 

viewWithTag: 
返回视图的特定的标签 
- (UIView *)viewWithTag:(NSInteger)tag 
参数 
tag 
一个用来在视图中搜索的标签 
返回值 
视图在接收者层次中符合的标签,接收者也包含在搜索中。 

willMoveToSuperview: 
通知接收者他的父视图将会改变到特定的父视图(也有可能是nil) 
- (void)willMoveToSuperview:(UIView *)newSuperview 
参数 
newSuperview 
新的视图对象将会是接收者新的父视图 
讨论 
子类可以重写这个方法来做一些特定的行为 

willMoveToWindow: 
通知接收者它已经被添加到特定的窗口对戏那个的视图层次中(也有可能是nil) 
- (void)willMoveToWindow:(UIWindow *)newWindow 
参数 
newWindow 
一个窗口对象将会成为接收者新的视图层次的根视图 
讨论 
子类可以重写这个方法来提供一些特定的必要实现 

willRemoveSubview: 
由子类重写用来在子视图从接收者视图中移除前执行一些特定的方法。 
- (void)willRemoveSubview:(UIView *)subview 
参数 
subview 
子视图将会被移除 
讨论 
这个方法被调用当子视图接收到removeFromSuperview消息或者子视图从接收者视图层次中移除因为它要被添加到其他视图了

EtherCAT APWR报文实战:从站地址配置(0x0010)的初始化流程与报文解析 本文详细解析了EtherCAT APWR报文在从站地址配置(0x0010寄存器)中的初始化流程与实战应用。通过类比物业分配门牌号,生动解释了APWR报文如何高效批量配置从站地址,并深入探讨了0x0010寄存器的特殊作用、初始化步骤及常见问题排查方法。文章结合IgH主站的三从站配置案例,提供了报文解析技巧和调试建议,帮助工程师快速掌握EtherCAT网络配置的核心技术。 阅读详情

相关推荐

【物联网】探索NE555:一款经典的集成电路(超详细)

NE555是一种集成电路,其内部结构包括比较器、RS触发器、电压比较器和输出级三个主要功能模块,外部引脚则提供了与其他电路元件进行连接的接口。NE555的设计目的是为了提供一种简单方便的定时器解决方案,它广泛应用于模拟和数字电路中。NE555作为一款经典的集成电路,具备设计简单、易于使用和稳定可靠的特点,在电子领域发展了广泛的应用。从单稳态模式到多稳态模式,再到振荡器模式,NE555可以满足不同的需求,并且可以与其他电路元件灵活组合,扩展其功能。然而,需要注意的是NE555也有一些限制。

Goforyouqp的博客 6万+

iOS基础之路之addsubview和insertSubView

子视图是以栈的方式存放的。 每次插入或添加时[self.view.subViews count]都会增加。 addsubview时都是在栈最后面添加,即在视图的最上方。 insertSubView时是插入栈的某一位置,即插入视图层的某一位置。 即[self.view addSubView:xx.view] 等价于 [self.view insertSubView:xx.view atIndex:[self.view.subViews count]]; 总之: addSubview是一层一层往上.

小天空的博客 3529

LM358实战:手把手教你搭建电流检测电路(附电阻选型计算)

本文详细解析了使用LM358运算放大器搭建电流检测电路的全过程,包括基础原理、采样电阻选型、放大电路设计及PCB布局技巧。通过实战案例和精确计算,帮助工程师快速掌握低成本、高精度的电流检测方案,适用于电源管理、电机控制等多种应用场景。

weixin_30872157的博客 448

UIView中的常用方法

addSubview:   添加一个子视图到接收者并让它在最上面显示出来。    - (void)addSubview:(UIView *)view    讨论    这方法同样设置了接收者为下一个视图响应对象。接收者保留视图。如果你使用removeFromSuperview方法用来把视图移除他的显示列表,那么视图将会被释放。如果你想要在视图移除显示列表後保留并使用这个视图(如果,举...

wsq198760的专栏 307

FPGA新手必看:用USB转TTL实现串口通信的完整流程(附CH340G电路详解)

本文为FPGA新手提供了通过USB转TTL模块实现串口通信的完整实战指南。详细解析了CH340G电路设计要点、硬件连接方法,并分享了经过验证的Verilog代码框架,帮助读者快速掌握FPGA与PC通信的核心技术,解决电平匹配与波特率设置等常见问题。

cake8的博客 1049

【YOLO系列】YOLOv12详解:模型结构、损失函数、训练方法及代码实现

本文提出YOLOv12,一种以注意力为中心的实时目标检测框架,通过创新性改进解决传统YOLO模型在精度与速度上的失衡问题。核心贡献包括:1)轻量混合注意力模块(LHA)结合通道与空间注意力,在不增加计算负担下提升特征提取能力;2)区域注意机制与R-ELAN网络优化特征聚合,显著改善小目标检测(AP_S提升8.3%);3)动态多光谱数据增强策略增强模型鲁棒性。实验表明,YOLOv12在COCO等基准上实现SOTA性能,同时保持2.1 TOPS/W的高能效比,适用于边缘设备部署。该工作为实时目标检测提供了新的注

一碗白开水一 1807

addSubview和insertSubview 的区别解析

子视图是以栈的方式存放的(先进后出)     每次addsubview时都是在最后面添加,即添加到栈顶。     每次在addsubview前和addsubview后可以用[self.view.subViews count]查看子视图的数量,或者用for(UIView  *view  in  self.view.subViews)遍历数组,你就可以看到的子视图是被添加到哪

linshaoquan的专栏 738

大数据分析利器:Tableau实战教程从入门到精通

你有3家分店,每月收集1000条销售数据(日期、分店、口味、销售额、订单数);想用Excel分析“哪家分店最赚钱”,但要做透视表→改格式→画柱状图,耗时30分钟,还经常因为公式错误返工;想看看“草莓味奶茶的月度销量趋势”,得手动筛选数据、调整折线图轴范围,稍不注意就漏看关键节点;想把分析结果分享给合伙人,Excel表格太抽象,对方盯着数字问“你到底想告诉我什么?

AI架构师小马 1492

insertSubview浅析

转自:http://www.jianshu.com/p/999fab84c428 最开始布局图: 测试1 ViewController // ViewController.h #import @interface ViewController : UIViewController @end // ViewController.m #i

zhanglizhi111的博客 722

电子电器架构刷写方案——General Flash Bootloader

### 文章大体有如下内容: ### 1、简介 ### 2、刷写系统概述 ### 3、Flash Bootloader刷写流程 ### 4、Flash Bootloader架构介绍 ### 5、关于刷写的思考

Soly_kun的博客 2209

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

相信读者基于Diagnostic/ISO TP Confighration中cdd、dll文件的测试并不陌生,本文基于其的基础上,介绍在capl中调用内置的函数diagGenerateKeyFromSeed实现27服务解锁,从而进行诊断自动化测试。本文基于4个byte的Seed、16个byte的Key的安全访问,实现27服务的自动化测试。需要加载项目使用的cdd文件,如果没有的情况下可以使用canoe例程中默认的cdd文件。

诊断协议那些事儿's blog 2054

UIView中常见的方法总结

UIView UIView 中常见的方法总结 addSubview:  添加一个子视图到接收者并让它在最上面显示出来。  - (void)addSubview:(UIView *)view  讨论  这方法同样设置了接收者为下一个视图响应对象。接收者保留视图。如果你使用removeFromSuperview方法用来把视图移除他的显示列表,那么视图将会被释放。如果你想要在

wln930218的专栏 502

2025年06月中国电子学会青少年软件编程(图形化)等级考试试卷(三级)答案 + 解析

2025年06月中国电子学会青少年软件编程(图形化)等级考试试卷(三级)答案 + 解析

伶俐角少儿编程 340

UIView的常见使用方法

UIButton不能点击情况的第二种是,你对button修改frame时,出现button的frame超过了父View的frame。这种情况也会导致button点击不能触发点击事件,这种情况只需要重新就该button的frame,并让button的frame不超过父View的frame。 ...

天道酬勤 661

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 详解UIView的 contentStretch属性
下一篇: Tint Color的理解和APP简单的主题化
Man_OC
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值