視圖控制器的創(chuàng)建
通過storyboard去創(chuàng)建視圖控制器
instantiate: 實(shí)例化;示例
Initial: 最初的
//拿到storyboard文件對象
//參數(shù)1:storyboard 文件名
let storyboard = UIStoryboard.init(name: "XXX", bundle: nil)
//拿到storyboard文件中箭頭指向的視圖控制器
let root2 = storyboard.instantiateInitialViewController()
視圖控制器的生命周期
生命周期中的幾種時態(tài)會自動調(diào)用的方法:
//注意:重寫生命周期相關(guān)的方法的時候必須通過supper去調(diào)用父類的相關(guān)方法
//創(chuàng)建視圖控制器的view屬性的時候會自動調(diào)用
//創(chuàng)建一個視圖控制器只會調(diào)用一次
loadView
//view已經(jīng)加載完成的時候會調(diào)用
//一般在這個方法中去搭建當(dāng)前視圖控制器對應(yīng)的界面
viewDidLoad
//視圖view將要出現(xiàn)的時候調(diào)用
//可能調(diào)用多次
viewWillAppear
//已經(jīng)出現(xiàn)
viewDidAppear
//將要消失
viewWillDisappear
//已經(jīng)消失
viewDidDisappear
//接收到內(nèi)存警告
didReceiveMemoryWarning
轉(zhuǎn)場動畫
duration: 持續(xù),持續(xù)的時間,期間
Direction: 方向;指導(dǎo);趨勢;用法說明
//a.創(chuàng)建轉(zhuǎn)場動畫
let animation = CATransition.init()
//b.設(shè)置動畫時間
animation.duration = 0.3
//c.設(shè)置動畫類型
animation.type = "cube"
//d.動畫方向
animation.subtype = kCATransitionFromTop
//e.添加動畫
//可以通過任何已經(jīng)顯示在界面上的視圖去拿到當(dāng)前應(yīng)用程序的window()主窗口
self.view.window?.layer.addAnimation(animation, forKey: nil)
為了方便可以將系統(tǒng)動畫封裝起來
創(chuàng)建一個類擴(kuò)展UIView :
import UIKit
//動畫類型的枚舉
enum TransitionType: String {
///交叉淡化過渡
case Fade = "fade"
///新視圖移到舊視圖上面
case MoveIn = "moveIn"
///新視圖把舊視圖推上去
case Push = "push"
///將視圖移開,顯示下面的新視圖
case Reveal = "reveal"
///向上翻頁
case PageCurl = "pageCurl"
///向下翻頁
case PageUnCurl = "pageUnCurl"
///滴水效果
case RippleEffect = "rippleEffect"
///收縮效果(如一塊布被抽走)
case SuckEffect = "suckEffect"
///立方體效果
case Cube = "cube"
///上下翻轉(zhuǎn)效果
case OglFlip = "oglFlip"
}
//轉(zhuǎn)場動畫的方向枚舉
enum TrasitionDirection: String {
case FromRight = "fromright"
case FromLeft = "fromleft"
case FromTop = "fromtop"
case FromBotton = "frombotton"
}
//擴(kuò)展UIView
extension UIView{
///添加轉(zhuǎn)場動畫
func addtransitionAnimation(duration: Double, type: TransitionType, direction: TrasitionDirection) {
//創(chuàng)建動畫對象
let animation = CATransition.init()
//設(shè)置動畫時間
animation.duration = duration
//設(shè)置動畫方向
animation.subtype = direction.rawValue
//設(shè)置動畫類型
animation.type = type.rawValue
//添加動畫
self.window?.layer.addAnimation(animation, forKey: nil)
}
}
將動畫封裝后,添加動畫的方式可以由一句話完成
self.view.addtransitionAnimation(2, type: TransitionType.Cube, direction: TrasitionDirection.FromBotton)
正向傳值
將上一個界面的值傳到下一個界面
方法:
1.在下一個界面中聲明一個屬性保存要傳的值的類型。例如:將上一個界面中的文本框中的文字傳到下一個界面,只需要在下一個界面中聲明一個String類型的屬性
2.在上一個界面將要彈出下一個界面的時候,給第一步聲明的屬性賦值
3.在下一個界面中去使用傳過來的值(在生命周期的viewdidload及其以后的時間段內(nèi)都可以使用)
核心代碼如下
//創(chuàng)建下一個界面的對象
let next = NextViewController()
//將當(dāng)前界面的文本框的內(nèi)容賦值給下一個界面用來接收傳值的屬性
next.value = self.textField.text
//彈出下一個界面
self.presentViewController(next, animated: true, completion: nil)