UI第一天學習總結
通過swift基礎語言的三周學習過后,今天迎接來了iOS開發第二階段的學習--UI
FirstBlood
首先我們APPAlication.swift進行了一些基本的認識,
下面就是APPAlication.swift的一個框架,雖然我們以前經??吹剿?,但是從未真正地去深入了解過它,如今這個UI階段我們將天天和它打交道。下面我們就來幾本理解一下它的結構框架吧!
//import是導入文件/庫的關鍵字
//UIKit是iOS中所有的控件所在庫文件
import UIKit
@UIApplicationMain //調用了OC中的UIApplicationMain函數;
//UIApplicationMain是iOS應用程序的入口
//UIApplicationMain:1.創建了一個UIApplication對象,代表當前應用程序. 作用是用來檢測當前應用程序狀態的改變。 2.創建一個遵守UIApplicationDelegate的協議的類的對象作為UIApplication的代理,作用是處理應用程序狀態的改變(創建AppDelegate對象并且設置為UIApplication對象的代理)
class AppDelegate: UIResponder, UIApplicationDelegate {
//屬性:
var window: UIWindow?
//方法:
//1.當應用程序已經啟動成功后,會自動調用這個方法
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
//1.在這個方法中來搭建應用程序中的所有的界面
//2.獲取應用程序需要展示的數據
//3.使用界面展示數據
//注意:如果不在這個方法中去創建window,那么程序會通過Main.storyboard去創建應用程序的界面
print("程序啟動成功")
return true
}
//2.當應用程序將要成為非活躍狀態的時候會自動調用這個方法。
//活躍狀態:程序在屏幕上可見
//非活躍狀態:程序沒有顯示在屏幕上(按home鍵進入后臺、來電打斷、在當前應用程序打開其他的應用程序)
func applicationWillResignActive(application: UIApplication) {
//按下home鍵:command + shift + h
//在這個方法中一般去暫停視頻/音頻播放;游戲需要暫停游戲;保存數據
print("將要成為非活躍狀態")
}
//3.應用程序已經進入后臺的時候會自動調用
//進入后臺:按home鍵
func applicationDidEnterBackground(application: UIApplication) {
//在這個方法中一般去暫停視頻/音頻播放;游戲需要暫停游戲;保存數據
print("已經進入后臺")
}
//4.應用程序將要進入前臺的時候會自動調用
//進入前臺:
func applicationWillEnterForeground(application: UIApplication) {
//按兩下home鍵:command + shift + h + h
print("將要進入前臺")
}
//5.應用程序已經變成活躍狀態的時候會自動調用
//a.程序啟動成功后
//b.程序從后臺重新進入前臺
//c.來電打斷結束。。。
func applicationDidBecomeActive(application: UIApplication) {
print("已經變成活躍狀態")
}
上面我將整個結構框架的解析注釋在了代碼里
UIWindow
window顧名思義就是窗口的意思,在這里我們將UIwindow稱為視圖窗口,下面我將把今天學習UIWindow的全部過程展示在我的代碼中,方便大家相互學習
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//創建一個視圖對象
let redView = UIView.init()
//添加到界面上
self.view.addSubview(redView)
//設置背景顏色
redView.backgroundColor = UIColor.redColor()
//1.frame(坐標和大小)
redView.frame = CGRectMake(100, 100, 100, 100)
//2.center(中心點坐標)
//a.通過frame和確定視圖的中心點坐標
print(redView.center)
//b.可以通過改變center的值,去改變視圖的坐標
redView.center = CGPointMake(200, 200)
print(redView.frame)
//3.bounds(坐標和大小)
//掌握:默認情況下bounds的坐標是(0,0),大小和視圖的frame大小一樣
print(redView.bounds)
//了解:
//如果改變bounds的大小,frame的大小和坐標都改變,center不變
/*
redView.bounds = CGRectMake(0, 0, 200, 200)
print("frame\(redView.frame)")
print("center\(redView.center)")
*/
//如果改變bounds的坐標,不影響當前視圖的位置。但是影響添加到當前視圖上的子視圖的坐標,不建議修改bounds
redView.bounds = CGRectMake(0, 0, 100, 100)
let yellowView = UIView.init(frame: CGRectMake(10, 10, 40, 40))
yellowView.backgroundColor = UIColor.yellowColor()
redView.addSubview(yellowView)
//4.transform(形變)
//當前視圖發生形變,那么添加到當前視圖上的所有的視圖會跟著一起形變
//a.縮放
//參數1:x方向上的縮放比例
//參數2:y方向上的縮放比例
redView.transform = CGAffineTransformMakeScale(0.8, 2.5)
//b.旋轉
//參數:旋轉角度(圓周率對應的角度值)
redView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4 / 2))
//c.平移
//參數1:在x方向上平移的距離,負值->向左移,正值->向右移
//參數2:在y方向上平移的距離,負值->向上移,正值->向下移
redView.transform = CGAffineTransformMakeTranslation(0, 300)
//d.多個形變同時發生
//在另外一個形變的前提下旋轉
//參數1:另外一個形變
//參數2:旋轉角度
redView.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(0.5, 0.5), CGFloat(M_PI_4 / 2))
//在另外一個形變的前提下平移
redView.transform = CGAffineTransformTranslate(redView.transform, 0, 300)
//在另外一個形變的前提下縮放
//創建一個平移的形變
let transLation = CGAffineTransformMakeTranslation(100, 0)
redView.transform = CGAffineTransformScale(transLation, 0.5, 2)
//組合兩個形變
//1.旋轉形變
let rotate = CGAffineTransformMakeRotation(0.2)
//2.平移形變
let transLation1 = CGAffineTransformMakeTranslation(100, 100)
//3.將旋轉形變和平移形變組合
redView.transform = CGAffineTransformConcat(rotate, transLation1)
}
}