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
比如上面这张图,它的 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)只要使用
alloc
和initWithFrame:
(UIView 的指定初始化)就行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。