欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发UI篇-常用控件详解(UIView)

程序员文章站 2022-09-04 18:01:59
一. 常用属性 1.alpha(不透明度) 设置视图的不透明度.默认为1. view.alpha = 0;// 完全透明 view.alpha = 1;// 不透明 2.clipstobounds...

一. 常用属性


1.alpha(不透明度)

设置视图的不透明度.默认为1.

view.alpha = 0;// 完全透明

view.alpha = 1;// 不透明

2.clipstobounds默认是no,当设置为yes时,超出当前视图的尺寸的内容和子视图不会显示。

3.hidden 默认是no,当设置为yes,视图就看不见了。

4.userinteractionenabled 默认为yes,如果设置为no,view就不能和用户交互了。(即不能响应事件)

5.tag

默认为0,用来标记视图的 6.exclusivetouch默认为no,exclusivetouch的意义在于:如果当前设置了exclusivetouch的uiview是整个触摸事件的第一响应者,那么到你所有的手指离开屏幕前其他的uiview是无法接受到整个事件周期内所有的触摸事件。 7.cgrect frame

1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0, 0)) 2> 修改这个属性,可以调整控件的位置和尺寸

8.cgpoint center

1> 表示控件的中点(以父控件的左上角为坐标原点) 2> 修改这个属性,可以调整控件的位置

9.cgrect bounds

1> 表示控件的位置和尺寸(以自己的左上角位坐标原点,位置永远是(0, 0)) 2> 修改这个属性,只能调整控件的尺寸

10.cgaffinetransform transform

1> 表示控件的形变状态(旋转角度、缩放比例) 2> 创建cgaffinetransform的函数

cgaffinetransformmakescale(cgfloat sx, cgfloat sy)

创建一个x、y方向的缩放比例分别为sx、sy的形变值

cgaffinetransformmakerotation(cgfloat angle)

创建一个旋转角度为angle的形变值

cgaffinetransformscale(cgaffinetransform t, cgfloat sx, cgfloat sy)

在形变值t的基础上,再进行缩放,x、y方向的缩放比例分别为sx、sy,然后返回一个新的形变值

cgaffinetransformrotate(cgaffinetransform t, cgfloat angle)

在形变值t的基础上,再进行旋转,旋转角度为angle,然后返回一个新的形变值

11.superview返回当前视图的父视图。(只读) 12.window返回当前视图的窗口。(窗口)

获取根视图的superview和window时,需要注意,在viewdidload中是获取不到的,viewdidload只是视图加载完成,并没有添加到窗口中,因此需要在viewdidappear方法中才能获取到。那时候视图才被添加到窗口中。

- (void)viewdidload

{

[super viewdidload];

nslog(@"%@",self.view.superview); // 没有值

nslog(@"%@", self.view.window); // 没有值

}

- (void)viewdidappear:(bool)animated

{

nslog(@"%@",self.view.superview); // 有值

nslog(@"%@", self.view.window); // 有值

}

13.autoresizessubviews默认为yes,表示当父视图尺寸改变时,子视图也会随着改变。 14.autoresizingmask默认为uiviewautoresizingnone,不会自动伸缩。 15.contentmode设置内容模式。

uiviewcontentmodescaletofill 不按照原宽高比例(长和宽不等比例增长)以任意比例填充。这样视图不会有空白,且内容可以全部显示。 uiviewcontentmodeaspecttofill 按照原长宽比例填充,不完全显示全部内容。这样内容可能溢出,但整个视图不会留有空白。 uiviewcontentmodeaspecttofit 按照原长宽比例(长和宽等比例增长),完全显示全部内容。这样容易照成左右或者上下留有空白。 16.backgroundcolor默认是nil。

二. 常用方法


1、addsubview:

添加一个子视图到接收者并让它在最上面显示出来. 2、bringsubviewtofront:

把指定的子视图移动到顶层.

-(void)bringsubviewtofront:(uiview *)view参数说明:view为需要移到顶层的视图 3、convertpoint:fromview:

把一个点从一个坐标系转换到接收者的坐标系 4、convertpoint:toview:

转换一个点从接收者坐标系到给定的视图坐标 5、convertrect:fromview:

转换一个矩形从其他视图坐标系到接收者坐标系。 如果参数视图是nil,那么这个方法将会基于窗口来转换。否则视图和接收者必须都属于同一个uiwindow对象 6、convertrect:toview:

转换接收者坐标系中的矩形到其他视图。如果参数视图是nil,这个方法将会基于窗口坐标系来转换。否则视图和接收者必须属于同一个uiwindow对象 7、didaddsubview:

告诉视图当子视图已经添加,被子类重写用来执行额外的命令当子视图添加到接收者。这个方法被addsubview调用 didmovetosuperview 通知接收者父视图已经改变(nil是允许的) 默认不做任何事情;子类可以重写这方法来作为特定的实现 8、didmovetowindow

通知接收者它已经被添加到窗口中 - (void)didmovetowindow

默认实现不做任何事情,子类可以重写这个方法来做特殊的实现;

窗口的属性有可能是nil当这个方法调用的时候,这表明接收者并不属于当然任何一个窗口。这个只发生在接收者从它的父视图上移除或者接收者添加到父视图中而不是添加到window中。重写这个方法可以用来选择忽略一些他们不关心的对象 9、drawrect:

在接收者视图中绘制矩形 - (void)drawrect:(cgrect)rect 参数 rect 一个定义的需要绘制的矩形

子类重写这个方法如果他们确实要绘制他们自定义的视图。如果子类是其他视图的容器那么它不需要重写这个方法。默认的实现不做任何事情。如果你自定义的视图是一个uiview子类,你不需要去调用它的父类实现。注意如果它的父类实现绘制并且不透明属性为yes那么每一个子类都需要填充矩形。 当这个方法被调用,接收者可以假定他的帧在坐标上已经转换,边界矩形已经应用;所有他要做的就是绘制自定义的方法。

使用uigraphicsgetcurrentcontext方法去获取当前图形内容用来绘制,坐标原点在左上角。

不要保留图片内容当他可以被drawrect:这个方法调用。

exchangesubviewatindex:withsubviewatindex: 交换接收者的子视图和给定的索引视图 - (void)exchangesubviewatindex:(nsinteger)index1 withsubviewatindex:(nsinteger)index2 参数 index1 一个需要取代索引2的子视图 index2 一个需要取代索引1的子视图 10、hittest:withevent:

返回接收者视图层次中最远的派生(包括它本身)的特定的点。

- (uiview *)hittest:(cgpoint)point withevent:(uievent *)event 参数 point 接收者坐标系中的点 event 触发这个方法的事件或者是如果这个方法被预调用就返回nil 返回值 一个视图对象最远的派生点。如果这个点位于接收者之外就返回nil.

这个方法贯穿视图的层次发送pointinside:withevent: 消息到每一个子视图用来决定那个子视图需要接收触摸事件。如果pointinside:withevent: 返回yes,那么视图的层次全部贯穿;否则视图层次的分支是被否定的。

你不太需要调用这个方法,但是你需要重写它用来隐藏子视图的触摸事件。 如果视图是隐藏的,禁止用户交互的或者透明值小于01那么这个方法不可用 11、initwithframe:

初始化并返回一个新的拥有特定帧矩形的视图对象

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

在视图层次顶层插入一个视图

- (void)insertsubview:(uiview *)view abovesubview:(uiview *)siblingsubview 参数 view 一个插入被用来放在顶层的视图。它将会从父视图中移除如果它不是相邻视图 siblingsubview 一个相邻视图用来放在插入视图的後面 13、insertsubview:atindex:

插入视图到指定的索引

- (void)insertsubview:(uiview *)view atindex:(nsinteger)index 参数 view 插入的视图,这个值不能是nil index 子视图索引从0开始并且不能大于子视图的数量 14、insertsubview:belowsubview:

插入视图到显示链的底层

- (void)insertsubview:(uiview *)view belowsubview:(uiview *)siblingsubview参数 view 一个需要插入到其他视图底部的视图。它将从它的父视图移除如果它不与相邻视图的相邻 siblingsubview 一个相邻视图将会在插入的视图之上 15、isdescendantofview:

返回一个布尔值指出接收者是否是给定视图的子视图或者指向那个视图

- (bool)isdescendantofview:(uiview *)view 参数 view 一个视图用来测试子视图在视图层次中的关系 返回值 如果接收者是视图的子视图就返回yes,或者视图就是接收者;否则就是no 16、layoutifneeded

排列子视图如果需要的话

- (void)layoutifneeded

使用这个方法来关注子视图的排列在绘制前 17、layoutsubviews

排列子视图

- (void)layoutsubviews

当layoutifneeded被调用是子类用来重写这个方法来排列子视图。默认实现这个方法不做任何事情。 18、pointinside:withevent:

返回一个布尔值指出接收者是否包含特定的点

- (bool)pointinside:(cgpoint)point withevent:(uievent *)event参数 point 一个在接收者坐标系内的点 event 这个方法的目标事件或者如果这个方法被预调用返回nil 返回值 如果点在接收者边界内返回yes,否则返回no 19、removefromsuperview

把接收者从它的父视图或者窗口移除,并在响应链中移除。

- (void)removefromsuperview

接收者同时释放;如果你计划重用它,要确定在发送消息前保持它并在添加到其他uiview对象作为子视图後移除。 不要在显示的时候调用 20、sendsubviewtoback:

移动指定的子视图到它相邻视图的後面

- (void)sendsubviewtoback:(uiview *)view 参数 view 一个子视图用来移动到它後面去 21、setneedsdisplay

控制接收者的边界矩形被标记为需要显示

-(void)setneedsdisplay

默认情况下,视图几何图形的改变自动重绘而不需要调用drawrect:方法。因此,你需要去请求视图重绘当视图的数据或者状态改变的时候。从这个意义上来说,向视图发送setneedsdisplay消息。任何uiview对象标记为需要显示後将会在应用程序循环中自动重新绘制。 22、setneedsdisplayinrect:

标记接收者中的特定的矩形区域为需要显示,或者添加接收者现有的其他无效区域

- (void)setneedsdisplayinrect:(cgrect)invalidrect 参数 invalidrect 标记接收者的矩形区域为无效的;他需要在接收者坐标系中定义。

默认情况下,视图几何图形的改变自动重绘而不需要调用drawrect:方法。因此,你需要去请求视图重绘当视图的数据或者状态改变的时候。使用这个方法或者用setneedsdisplay方法来标记视图需要显示的地方。 23、setneedslayout

设置当子视图显示的时候需要重新排列

- (void)setneedslayout

如果你调用这个方法在下一个显示方法之间,那么layoutifneeded排列子视图;否则将不会做任何事情 24、sizethatfits:

计算并返回一个最好的适应接收者子视图的大小

- (cgsize)sizethatfits:(cgsize)size 参数 size 接收者首选的尺寸 返回值 一个新的大小用来适应接收者子视图

默认的实现返回大小参数

子类重写这个方法用来返回特定视图的大小。举个粒子,uiswitch返回一个修正过的大小,uiimageview返回图片的大小 这个方法并没有改变接收者的大小 25、sizetofit

调整大小并移动接收者视图大小所以他包含了他的子视图

- (void)sizetofit讨论 这个方法使用sizethatfits: 方法来决定大小。

子类需要重写sizethatfits:用来计算正确的尺寸大小。

默认的实现不做任何事情。 26、viewwithtag:

返回视图的特定的标签

- (uiview *)viewwithtag:(nsinteger)tag 参数 tag 一个用来在视图中搜索的标签 返回值 视图在接收者层次中符合的标签,接收者也包含在搜索中。 27、willmovetosuperview:

通知接收者他的父视图将会改变到特定的父视图(也有可能是nil)

- (void)willmovetosuperview:(uiview *)newsuperview 参数 newsuperview 新的视图对象将会是接收者新的父视图 讨论 子类可以重写这个方法来做一些特定的行为 28、willmovetowindow:

通知接收者它已经被添加到特定的窗口对戏那个的视图层次中(也有可能是nil)

- (void)willmovetowindow:(uiwindow *)newwindow 参数 newwindow 一个窗口对象将会成为接收者新的视图层次的根视图

子类可以重写这个方法来提供一些特定的必要实现 29、willremovesubview:

由子类重写用来在子视图从接收者视图中移除前执行一些特定的方法。

- (void)willremovesubview:(uiview *)subview 参数 subview 子视图将会被移除.

这个方法被调用当子视图接收到removefromsuperview消息或者子视图从接收者视图层次中移除因为它要被添加到其他视图了

三. 其他(绘图相关方法)

1、drawatpoint:: mode = kcgblendmodenormal, alpha = 1.0。在 point这个点绘图。

- (void)drawatpoint: (cgpoint)point;

2、drawatpoint:blendmode: alpha::在 point这个点,以某种模式绘图。

- (void)drawatpoint: (cgpoint)point blendmode: (cgblendmode)blendmode alpha: (cgfloat)alpha;

3、drawinrect::mode = kcgblendmodenormal, alpha = 1.0。在某个具体位置进行绘图。

- (void)drawinrect: (cgrect)rect;

4、drawinrect: blendmode:alpha::在某个具体位置,以某种模式,某种透明度进行绘图。

- (void)drawinrect: (cgrect)rect blendmode: (cgblendmode)blendmode alpha: (cgfloat)alpha;

5、drawaspatterninrect::draws the image as a cgpattern.在某个具体位置平铺图像。

- (void)drawaspatterninrect: (cgrect)rect;

6、resizableimagewithcapinsets::创建并返回一个指定边距的图像对象。

- (uiimage *)resizableimagewithcapinsets: (uiedgeinsets)capinsets;

7、resizableimagewithcapinsets:resizingmode::创建并返回一个指定边距和伸缩模式的图片对象。

- (uiimage *)resizableimagewithcapinsets: (uiedgeinsets)capinsets resizingmode: (uiimageresizingmode)resizingmode ns_available_ios(6_0);

8、imagewithalignmentrectinsets::返回一个指定了对齐方式的图片,一个新的图片对象。

-(uiimage*)imagewithalignmentrectinsets: (uiedgeinsets)alignmentinsets ns_available_ios(6_0);

9、imagewithrenderingmode::根据渲染模式,创建一并返回一个新的图片对象

-(uiimage*)imagewithrenderingmode: (uiimagerenderingmode)renderingmode ns_available_ios(7_0);

10、imageflippedforrighttoleftlayoutdirection::返回当前图片,准备水平旋转时,它会从右向左布局。

-(uiimage*)imageflippedforrighttoleftlayoutdirection ns_available_ios(9_0);