斯坦福iOS7公開課7-9筆記及示範Demo,斯坦福ios7公開課7-9

來源:互聯網
上載者:User

斯坦福iOS7公開課7-9筆記及示範Demo,斯坦福ios7公開課7-9

   這一部分主要介紹了iOS的繪圖、手勢、協議、block、力學特效動畫(包括重力、碰撞、吸附等)以及自動布局的內容。

   一、繪圖、手勢

    (1)調用一個自訂的UIView時,可以使用awakeFromNib方法做一些初始化工作。

    

    (2)iOS中繪圖需要瞭解的常用測量單位:

     CGFloat:浮點值,與float一樣;

     CGPoint、CGSize、CGRect是三個結構體分別代表遊XY座標描述的店、寬度高度描述的大小值以及由原點座標、寬度高度描述的矩形,度量單位都是CGFloat。

     

    (3)自訂的UIView實現檔案中有一個drawRect方法,給我們提供了重新繪製UIView的入口,通過重寫這個方法來更新我們的UIView,但是蘋果要求開發人員使用setNeedsDisplay這個方法去通知系統調用drawRect進行重繪,而不是直接調用。

    

    (4)iOS給開發人員提供了UIBezierPath類,實現通過直線或曲線等方式構造繪製圖形

    (5)繪製圖形時的座標系參考,原點是在左上方,bounds指View本身矩形所組成的座標系,frame指View外包矩形組成的座標系,center座標指View的中心點在父視圖座標系中的座標值。

      

    (6)手勢,系統已經對手勢進行了封裝,可以直接使用,兩種使用方法:

          一種是添加手勢到Interface Builder中,然後將其串連到實現檔案中,再對手勢進行處理,進一步使用過程發現,可能是哪裡設定沒做好,使用次要視窗時候修改storyboard和標準單視窗修改storyboard,二者修改的結果沒有同步,最後手動再次修改,這一點需要注意一下。

     還有一種方法是在代碼中直接添加,提前(比如在ViewDidLoad中)addGestureRecognizer,指明手勢響應函數,實現函數方法。

     

     

    (7)對於手勢的狀態,首先分為不連續手勢和連續手勢,不連續手勢比如點選手勢Tap,只有一種狀態Recognized,代表接觸螢幕那一刻被識別到了。對於不連續手勢,比如捏合縮放手勢pinch,手勢進行的過程中有Began、Failed、Changed、Cancelled狀態。這些狀態對實現手勢處理方法很關鍵,當手勢已經開始執行了,需要對手勢進行處理就是在changed狀態下進行,一些特殊情況,例如當使用手勢時有電話進來,這時會進入Cancelled狀態。

    二、協議、Block、力學特效動畫

     (1)協議,iOS針對不同對象提供了特定的方法,當然如果想使用這些方法,還需要按照規定格式聲明一下,有點類似於介面的作用,預先提供了一些介面方便開發人員使用,指定代理delegate,讓代理者來實現協議中所提供的方法,比如Demo中使用了UIDynamicAnimatorDelegate這個協議提供的dynamicAnimatorDidPause方法(力學行為中斷停止時觸發),並在裡面調用了自訂的方法,用來實現物體滿一行後消失的效果。

      

     

     當然,也可以根據需要自訂協議,比如兩個頁面之間跳轉,尤其是需要頁面跳轉傳值時,還可以把值作為協議方法裡的參數進行傳遞。

     

     

     (2)Block,代碼塊,有點類似C#的匿名函數。

       

      使用block時需要注意retain cycle的問題,比如Demo中的一個block,由於如果在內部直接使用self,會造成block與self之間互相都有一個strong指標,造成二者都不能銷毀,所以需要通過弱引用weakSelf來代替self。

      

     (3)視圖動畫,iOS提供了一些封裝好的視圖動畫效果供開發人員直接使用。

     (4)力學特效動畫,iOS中也已經封裝好了許多效果,Demo中用到了重力、碰撞、吸附效果,使用方法如下:

        首先建立一個用於動畫執行的容器UIDynamicAnimator,其中ReferenceView代表在那個view中進行動畫,相當於物理學中的力學參考系。

      

      在對具體的力學特效進行描述,指定是哪一種行為,

      

     指定執行動畫效果的對象(這裡的dropBehavior是組合了重力和碰撞效果的行為)

     

    三、自動布局

    Xcode中提供了自動布局機制,對一些簡單介面,加入一些約束條件就能處理不同尺寸、旋轉螢幕後的介面顯示效果。

    

    使用自動布局(已經加了約束條件)前後效果:

        

    Demo效果,:http://files.cnblogs.com/colinhou/Dropit.zip

    




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.