iOS基礎(二)

UIView

  • 視圖,表示屏幕上的一塊矩形區域,同時處理該區域的繪製和觸屏事件。
  • 一個視圖也能夠做爲其餘視圖的父視圖,同時決定着這些子視圖的位置和大小.
  • UIView類作了大量的工做去管理這些內部視圖的關係。
  • 視圖同時也是App中MVC的View部分
  • iPhone的視圖以左上角爲原點
  • 每一個View的frame所使用的座標系以它的父視圖的左上角爲坐
    關函數

    • 視圖結構和相
CGPoint Point = CGPointMake(x,y);//設置
    CGSize size = CGSizeMake(width,height);//大小
    CGRect rect = CGRectMake(x,y,width,height);//位置和大小

Frame和Bounds

  • Frame以其父視圖爲起點,得出它本身的位置信息
  • Bounds以iOS系統的座標原點爲起點,座標是(0,0)
  • Center表示視圖中心所在的位置,設置此屬性可改變視圖的位置

    • 默認狀況下,視圖邊框並不會被父視圖的邊框裁剪。若是須要裁剪,將其clipsToBounds屬性設置爲YES.

建立UIView

  • 建立UI有兩種方式,xib文件和代碼建立

```Objective-c
//經過xib方式來建立視圖對象
NSBundle *bundle = [NSBundle mainBundle];
NSArray *arr = [bundle loadNibNamed:@"myView" owner:self
options:nil];
UIView *myView = [arr objectAtIndex:0];數組


```Objective-c //代碼建立視圖對象 CGRect viewRect = CGRectMake(0,0,100,100); UIView *myView =[[UIView alloc] initWithFrame:viewRect];

視圖的層次結構

  • UIView層次結構能夠理解爲「視圖樹」————view hierarychy
  • 一個視圖就是一個容器,當一個視圖包含其餘的視圖的時候,兩個視圖之間就創建了一個父子關係,被包含的視圖被稱爲「姿式圖(subView)」,包含的視圖稱爲「父視圖(superView)」
  • 從視覺上看,子視圖會覆蓋父視圖的內容,設置透明屬性能夠看到父視圖的內容。
  • 每一個父視圖都有一個有序的數組存儲着它的子視圖,存儲的順序就會影響到每一個子視圖的顯示效果,後加的視圖會覆蓋以前的視圖。
  • 一個視圖能夠嵌入多個subView,可是隻能有一個superView。

    • 視圖的經常使用方法
      ```Objective-c
      addSubView: // 添加子視圖
      insertSubview:atIndex: // 視圖插入到指定索引位置
      insertSubview:ahoveSubview: // 視圖插入指定視圖之上
      insertSubview:belowSubview: // 視圖插入指定視圖之下
      bringSubviewToFront: // 把視圖移動到最頂層
      sendSubviewToBack: // 把視圖移動到最底層
      exchangeSubViewAtIndex:withSubviewAtIndex://把兩個索引對應的視圖調換位置
      removeFromSuperview: // 把視圖從父視圖中移除

##查找視圖 - UIView類中有一個tag屬性,經過這個屬性能夠標誌一個視圖對象(整數) - 獲取的方法,viewWithTag:方法來檢索標誌過的子視圖 ```Objective-c UIView *myView = [[UIView alloc] initWithFrame:CGRectmake(0,0,100,100)]; myView.tag = 100; // 經過tag查找view UIView *myView = [self.view vieWithTag:100];

UIView的經常使用屬性

  • alpha // 透明度
  • backgroundColor // 背景顏色
  • subViews // 子視圖集合
  • hidden // 是否隱藏
  • tag // 標籤值
  • superview // 父視圖
  • mulitpleTouchEnaled // 是否開啓多點觸摸
  • userInteractionEnabled // 是否響應觸摸事件

座標系統變換

  • 座標變換經過transform屬性來改變

    • CGAffineTransformScale 對視圖比例縮放
    • CGAffineTransformRotae 對視圖作變焦旋轉
    • CGAffineTransformTranslate 對視圖相對原位置作平移
CGAffineTransform transform = rootView.transform;
    rootView.transform = CGAffineTransformScale(transform,0.5,0.5);
    rootView.transform = CGAffineTransformRotae(transform,0.33);
    CGAffineTransformScale(transform,0.5,0.5);
    rootView.transform = CGAffineTransformTranslate(transform,100,100);

視圖的內容模式

  • 視圖的contentMode屬性決定了邊界變化和縮放操做
UIImageView *imgeView1 = [[UIImageView alloc] initWithFrame:CFRectMake(320/2-200/2,30,200,200)];
    imgeView1.imge = [UIImage imageNamed:@"01"];
    imgeView1.backgroundColor = [UIColor redColor];
    imgeView1.contentMode = UIViewContentModeScaleAspectFit;
    [self.window addSubview:imgeView1];
    [imView1 release];

    UIImageView *imgeView2 = [[UIImageView alloc] initWithFrame:CFRectMake(320/2-200/2,240,200,200)];
    imgeView2.backgroundColor = [UIColor yelloColor];
    imgeView2.contentMode = UIViewContentModeBottom;
    [self.window addSubview:imgeView2];
    [imView2 release];

UIView屬性的動畫

  • UIView類的不少屬性都被設計爲動畫,動畫的屬性是指當屬性從一個值變爲另外一個值的時候,能夠半自動地支持動畫,你仍然必須告訴UIKit但願執行什麼類型的動畫,可是動畫一旦開始,Core Animation就會全權負責。UIView對象中支持動畫的屬性有以下幾個:

    • frame - 動畫的改變視圖的尺寸和位置
    • bounds - 動畫的改變視圖的尺寸
    • center - 動畫的改變視圖的位置
    • transform - 動畫的翻轉或者縮放視x圖
    • alpha - 動畫的改變視圖的透明度
    • backgroundColor - 改變視圖的背景色
    • contentStetch - 改變視圖內容如何拉伸

配置動畫委託

  • 能夠爲動畫分配一個委託,並經過該委託接受動畫開始和結束的消息。當須要在動畫開始前和動畫結束後極力執行其餘任務時,可能就須要設置委託。
  • 經過UIView調用setAnmationDelegate:方法來設置委託,並經過setAnimationWillStartSelector:和setAnimationDidStopSelector:方法來指定接受消息的選擇器方法。消息處理方法形式以下:
    (void)animationWillStart:(NSString *)animationID context:(void *)context;
    (void)animationDidStop:(NSString *)animationID finished context:(void *)context;
    上面的兩個方法的animationID和context參數和動畫塊開始時傳給beginAnimations:context:方法的參數相同
    + animationID - 應用程序提供的字符串,用於標識一個動畫塊中的動畫
    + context - 應用程序提供的對象,用於向委託對象傳遞額外的信息函數

    setAnimationDidStopSelector:選擇器方法還有一個參數——即一個布爾值。若是動畫順利完成,沒有被其餘動畫取消或中止,則該值爲YES。動畫

配置動畫的參數

  • setAnimationStartDateS方法來設置動畫在commitAnimations:方法返回以後的發生日期。
  • setAnimationDelay:方法來設置實際發生動畫和commitAnimations:方法返回的時間點之間的間隔
  • setAnimationDuration:方法來設置動畫的持續秒數
  • setAnimationCurve:方法來設置動畫過程的相對速度,好比動畫可能在啓動階段逐漸加速、而在結束階段逐漸減小,或者這個過程都保持相同的速度
  • setAnimationRepeatCount:方法來設置動畫的重複次數
  • setAnimationRepeatAutoreverses:方法來指定動畫在到達目標值時是否自動反向播放。但是結合使用這個方法和setAnimationRepeatCount:方法,使各個屬性在初始值和目標值之間平滑切換一段時間。
  • 缺省狀況下,全部支持動畫的屬性在動畫塊中發生的變化都會造成動畫。若是但願讓動畫塊中發生的某些變化不產生動畫效果,能夠經過setAnimationsEnableed:方法來暫時禁止動畫,在完成修改後才從新激活動畫,在調用setAnimationsEnabled:方法並傳入NO值以後,全部的改變都不會產生動畫效果,指定用YES值再次調用這個方法或者提交這個動畫塊是,動畫纔會恢復,能夠用areAnimationsEnable:方法來肯定當前是否激活動畫。
-(void)animationAlpha
    {
        [UIView beginAnimations:nil context:NULL];// 須要設置代理時
        [UIView setAnimationDuration:1];// 動畫的持續時間
        [UIview setAnimationDelay:1];// 動畫延遲時間
        view2.apleha = 0.0;
        [UIView commitAnimations];// 標記着動畫塊的結束
    }
    -(void)animationFrame
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:5];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];// 動畫相對速度,開始和結束的時候慢,中間快
        view.center = CGPointMake(0,0);
        [UIView commitAnimations];
    }
相關文章
相關標籤/搜索