Views

  • View 画出矩形空间,并处理其中的事件。

    • View 具有层次结构。一个 View 只能有一个父 View,但可以有多个子 View。子 View 的顺序是有关系的,在数组中的位置越高或者说是数字越大,就显示在后面。
  • 可以用代码实现分层,有两个重要的代码:
- (void)addSubview:(UIView *)aView;
- (void)removeFromSuperview;

需要注意的是,通过父 View 添加子 View,而移除要通过子 View 它自己。

  • View 绘图的四个主要类型:CGFloat,CGPoint,CGSize,CGRect。

坐标

  • iOS 的坐标原点在左上角。
  • 坐标单位是点而不是像素,点是图形上的一种术语。UIView 有个 property 叫 @property CGFloat contentScaleFactor;,它会返回一个点有多少个像素。
  • View 有三个和位置相关的 property:
@property CGRect bounds;  // 你的视图内部的绘图区域的原点和大小。
bounds 属性用在你 view 自己的实现方法里。
It is up to your implementation至于怎样解释 bounds.origin 的含义,这取决于你的实现方法
@property CGPoint center;  // 你的视图在父视图坐标空间里的中心点
@property CGRect frame;  // 父视图坐标空间的整个外边框
// contains your view’s bounds.size

旋转 View

比如上面这张图,它的 bounds 也就是左上角的 (200,250) 那个点。对于 View B 来说并不知道自己被旋转了,而是其他某些东西旋转了它。再看下 View B 的 frame,在 View A 的坐标系统里它比 View B 大了好多。因为它要完整的装下 View B,包括 B 的旋转状态。所以 View B 的 bounds 只有 200 * 250,但是 View B 的 frame 大多了,是 320 * 320。它的中心点是 (300,225),如果你不小心在 View B 的内部用了这个 center,你甚至都没法画出它的 bounds 了,因为已经在屏幕外面了。bounds 不会显示,因为 View B 只有 200 * 250,但中心点远在 (300,225)。

View B 它自己的中心点是 :

(bound.size.width/2 + bounds.origin.x, bounds.size.height/2 + bounds.origin.y)

这个例子中它是 (100,125)。

创建 View

  • 通常做法是从 View Library 中拖出一个通用 UIView,然后使用 Inspector 改变 UIView 为你自定义的类。

  • (通过代码创建 UIView)只要使用 allocinitWithFrame:(UIView 的指定初始化)就行。



jkyin
286 声望13 粉丝

iOS developer.