2011斯坦福 iOS 應用開發第四課 — Views

Views

  • View 畫出矩形空間,並處理其中的事件。

    • View 具備層次結構。一個 View 只能有一個父 View,但能夠有多個子 View。子 View 的順序是有關係的,在數組中的位置越高或者說是數字越大,就顯示在後面。
  • 能夠用代碼實現分層,有兩個重要的代碼:
- (void)addSubview:(UIView *)aView;
- (void)removeFromSuperview;

須要注意的是,經過父 View 添加子 View,而移除要經過子 View 它本身。segmentfault

  • 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 它本身的中心點是 :spa

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

這個例子中它是 (100,125)。code

建立 View

  • 一般作法是從 View Library 中拖出一個通用 UIView,而後使用 Inspector 改變 UIView 爲你自定義的類。事件

  • (經過代碼建立 UIView)只要使用 allocinitWithFrame:(UIView 的指定初始化)就行。rem

相關文章
相關標籤/搜索