[ SWIFT ] - 史丹福 StandFord-CS193P-課程11-心得分享-20150901

[ SWIFT ] - 史丹福 StandFord-CS193P-課程11-心得分享-20150901
課程重點:(1)UnWind Segues(2)Alerts and Action Sheets(3)Timer(4)Animation
這堂課老師花了30分鐘在說明接下來3週希望同學提案完成一個app,app的內容希望盡量用到各種不同的swift api技能,每個人有90秒的上台報告時間。

UnWind Segues
1.和Segue最大的不同點:唯一一個在Segue的過程中不諱創建新的MVC。
  透過UnWind Segues直接或間接展適當前MVC
2.何時會用到:
例如:navigation view中有6張牌,透過UnWind Segues可以直接或間接回到上一張牌的位置。

※Modal Segue:指取代整個螢幕,例如:popover Segue就是一種Modal Segue跳出時會佔住整個螢幕,只能在上面動作後再回到Precent View,而UnWind Segues就是指回到Precent View的部份,只是UnWind Segues的作法更簡單。
 
3.如何使用UnWind Segues:透過Ctrl+拖曳至Exit!建置UnWind Segues。
※UIStoryboardSegue:在UI中增加IBAction 時如果他的參數是UIStoryboard Segue在透過ctrl+拖曳至 Exit 建置UnWind Segues時就會看到此方法在裡面?

※建置UnWind Segues後在重新拖曳一次就可取消。
下圖為UnWind Segues建置方法:
  
 
 Alerts and Action Sheets
 在IOS中有2種請求用戶選擇的彈出框:(1)Alerts(2)Action sheets,2者都是以modal方式佔據螢幕。
2者的區別:
Alerts會接管螢幕並在中央出現,適用於只有1,2項的問答,例如:Yes,No或同意,不同意
Action sheets不會直接出現在螢幕中央,而是從底部滑出,一般大多是popover形式,此外Action sheets是一種結合的一堆選項的表單。
組成:
(1)title:表頭
(2)message:表單呈現的內容
(3)preferredStyle:決定Alert 或Action Sheets
(4)addAction:增加選項
    (4.1)title
    (4.2)style:設定.Destructive會使紅色字體呈現選項。
              ※.Cancel項目會出現在最下面與其他選項分開。
    (4.3)handler:當點選選項時要做的事




(5)透過presentViewController 來呈現Alert(由於Alert也是一種 ViewController,因此也可以說透過presentViewController來讓一個View Controller呈現在螢幕上),presentViewController共有3個參數:(5.1)要展示的 viewController(5.2)是否執行動畫,true:執行(5.3)completion:完成之後要做的事。
Ex:
presentViewController(detalView, animated: true, completion: nil)

※Action Sheets中使用 .cancel時,如果是在iPad中並不會像iPhone中將cancel放在最下面呈現,而是會直接出現在點選位置旁。
※在iPad中的城市可直接於iPhone中呈現,但iPhone中的程式如果要在iPad中執行時便需考慮像上面的例子。
 
※在iPad中使用addTextFieldWithConfigurationHander來加入TextField到Alert中
取得Alert中TextField的方式:
let tf = self.alert.textFields?.First as? UITextField
※由於Alert中的TextField類位有可能是空值(nil),因此textFields加上?
※.First回傳 array中第一個資料,如果沒有資料回傳nil,由於array是Any Object格式,因是需加上as? UITextField進行格式轉換。
 

NSTimer
1.NSTimer是一種設置定時器的東西,可以週期性調用一個方法,使用的技術稱為RunLoop
※永遠在煮隊列中使用NSTimer,因為主隊列中有RunLoop
2.NSTimer並不是計時器,當設定每2秒執行一次時,並不會每2秒執行一次,因為NSTimer只是放置事件使用。
3.NSTimer像是在主隊列中設置事件,設置後透過RunLoop來執行,但由於隊列中其他事件的延遲,因此無法做到即時執行!(因為還有其他事件在主隊列中執行),但由於NSTimer的優先權很高,因此實際執行的情況會很類似即時執行!(前提是主線程沒有阻塞)
4. NSTimer不適合作為動畫使用,NSTimer適合在動畫執行過程中透過NSTimer來補充一謝動畫所需的資訊,例如:計算分數


NSTimer的使用:
(1)調用NSTimer Class 的方法:
ScheduledTimerWithTimeInterval:
NSTimer.scheduledTimerWithTimeInterval(TIME_INCREMENT, target:self, selector: Selector("FUNCTION"), userInfo: nil, repeats: BOOL)

參數說明:
1.啟動的間隔時間。
2.target:希望向誰發送信息(AnyObject格式)
3.selector:需要定時器執行的方法
4.UserInfo:傳遞參數
5.repeats:定時器是否指執行一次或是幾秒執行一次。
※注意:在NSTimer中共有4個方法都很類似,可由參數進行判斷!  

NSTimer的停止方式:
透過timer.invalidate計時器就會停止!
※可透過tolerance(以秒為單位)讓系統效能更好一點,以更高效的方式執行。
Ex:tolerance=10表示讓系統等待10秒,以尋找更好的執行時間。
正確來說tolerance是讓系統不要一直處於高耗能的狀態,當執行tolerance時系統會轉換位低耗能而使系統執行更有效率。
※一般建議tolerance的設定時間為 NSTimer的1/10,例如:NSTimer=20秒,則 tolerance=2秒
 
 
Animation-動畫
Animation的種類:
(1)使view的屬性執行動畫。
(2)view controller的過場動畫。例如: alert sheet從底部滑出!
(3)Core Animation:強大的動畫引擎
(4)Dynamic Animation:物理引擎的動畫,賦予view重力和碰撞,以及其他如:摩擦力和密度大小等設定。
 

 (1)使view的屬性執行動畫:
說明:在view中只有部分屬性可以用在執行動畫,在view層面中只能操作3種最主要的功能:
(a)frame:讓你的view到處移動。
(b)transform:旋轉或放大縮小你的view
(c)alpha:透明度
 
在UIView如何操作animation屬性:透過UIView.animateWithDuration(_:, delay:, options:, animations:, completion:)
class func animateWithDuration 屬性:
(1)duration:動畫執行的時間長度。
(2)delay:等待時間。
(3)options:有非常多的屬性將另外介紹(UIView AnimationOptions介紹
(4)animations:動畫效果
(5)completion:執行完後要執行的動作,沒有時為nil
 
 
UIView AnimationOptions介紹:
CurseEaseInEaseOut:一開始慢速然後逐漸加速到正常後再慢慢慢下來,例如:淡入淡出。
※所有的動畫都是在另一隊列,不在主隊列中!以免產生阻塞。
 
以下為改變view層次的方法:



 
UIViewAnimationOptionsTransitionFlipFrom:翻轉整個view
UIViewAnimationOptionsTransitionCrossDissolve:view切換時讓view產生溶解效果
UIViewAnimationOptionsTransitionCurl:向下或向上卷曲
 

留言

熱門文章