iPhone 应用程序开发 UIView和VIWindow

iPhone 应用程序开发 UIView和UIWindow

UIview 和 UIWindow
UIView 基本概念
UIView 是 iPhone应用程序中所有界面的基础.在 iPhone 中我们看到的、摸到的都是UIView,所以 UIView 在 iPhone 开发中具有非常重要的作用.为此官方还专门写了一个文档" View Programming Cuide for iOS". 通过这个可以很好地了解 UIView 的功能.   
The UIView class defines a rectangular area on the screen and the interfaces for managing the content in that area. At runtime, a view object handles the rendering of any content in its area and also handles any interactions with that content.   
(UIView在屏幕上定义了一个矩形区域和管理区域内容的接口。在运行时,一个视图对象控制该区域的渲染,同时也控制内容的交互。)所以说UIView具有三个基本的功能,画图和动画,管理内容的布局,控制事件。
UIWindow

在iPhone应用程序通常只有一个窗口,它是一个UIWindow类的实例。windows 不提供任何可视化的界面内容,它的主要作用就是为应用程序的其它视图提供一个容器。iPhone应用程序在启动时创建这个窗口(或者从nib文件进行装载),并往窗口中加入一或多个视图,然后将它显示出来。窗口显示出来之后,一般情况下我们很少需要再次引用它。对于用户来说不能直接对其进行作何操作,所有对窗口的操作都需要通过其编程接口来实现。UIWindow对象有两个基本且非常重要的作用:1、提供一个设备的显示区域用于显示UIView 2、分发事件给View. 在iOS中UIWindow是UIView的子类。 


iOS 坐标系
  • iOS 坐标系与我们常用的笛卡尔坐标系不同,它是以左上角为坐标原点,向下为 y 轴的正方向,向右为 x 轴正方向
  • CGPoint、CGSize、CGRect这是三个结构体。CGPointMake(x,y)决定位置, CGSizeMake(width,height) 决定大小, CGRectMake(CGPoint,CGSize)
frame、bounds和center
  1. frame包含了frame矩形,指定了当前视图相对于父视图坐标系统尺寸和位置。
  2. bounds属性包含了边界矩形,指定了在当前视图本地坐标系统中视图的尺寸。
  3. center属性包含了在父视图坐标系统中的已知中心点(也是相对于父视图而言)。

注意:
主要使用center和frame属性来控制当前视图的几何结构。例如,在运行时构建你的视图层次或者改变视图的尺寸或者位置时你可以使用这些属性。如果你只是要改变视图的位置,那么推荐使用center属性。center属性的值永远是可用的。
在绘制的过程中主要使用bounds属性。这个边界矩阵在视图的本地坐标系统被解释。这个矩形的默认原点是(0, 0),它的尺寸也适应frame矩形的尺寸。任何绘制在这个矩形当中的东西都是该视图的可视内容的一部分。如果你改变了bounds矩形的原点,任何你绘制在新矩形的东西都会变成该视图可视内容的一部分。

frame、bounds和center之间的关系

  frame、bounds和center三者是相互影响的,当你改变其中一个的时候,其他两个也会随之发生改变。
  当你设置了frame的属性,bounds属性的尺寸值也改变来适应frame矩形的新尺寸,center的值也会改变为frame矩形的中心值。
  当你设置了center属性,frame 的原点也会随之相应的改变。
  当你重新设置了bounds属性,frame属性会根据新的bounds的宽、高在不改变center的情况下,进行重新设定。
  当然,视图的框架默认不会被它的父视图剪裁。这样的话,任何放置父视图外的子视图都会被完整的解释.我们可以改变这种行为,改变父视图的 clips ToBounds 属性就可以了.这样,不管子视图是否在视觉上被剪裁,触屏事件总是发生在目标视图父视图的 bounds 矩形范围内.换而言之,如果触摸位于父视图外的那部分视图,那么该事件不会被发送到该视图.

clips ToBounds 设置为 YES, 子视图只是在视觉上被剪裁了,但是 bounds 实际上是没有发生变化的.

iOS视图层次结构
  • 除了提供自己的内容之外,一个视图也可以表现的像一个容器.当一个视图包含其它视图时,就在两个视图创建了一个父子关系.在这个关系中孩子视图被当作子视图,父视图被当做超视图.创建这样一个关系对应用的可视化和行为都有重要的意义.
  • 在视觉上,子视图隐藏了父视图的内容,如果子视图是完全不透明的,那么子视图所占的区域就完全的隐藏了父视图相应的区域.如果子视图是部分头透明的,那么两个试图在显示之前就混合在一起了.每个父视图都用一个有序的数组储存它的子视图,存储的顺序会影响到每个子视图的显示效果.
  • 父子视图关系也会影响着一些视图行为.改变父视图的尺寸会连带着改变子视图的尺寸和位置.在这种情况下,我们可以通过合适的配置视图来重定义子视图的尺寸.其它会影响到子视图的改变包括隐藏父视图、改变父视图的alpha值,或者转换父视图。
  • 视图的层次的安排也会决定着应用如何去响应事件.在一个具体的视图内部发生的出没事件通常会被发到该视图去处理.但是,如果该视图没有对象去处理,它会将该事件传递给它的父视图,在响应者链中以此类推.具体视图可能也会传递事件给一个干预响应者对象,如视图控制器.如果对象没有处理这个事件,它最终会到达应用对象,此时通常就被丢弃了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值