AppDelegate.swift中应该了解的内容
@UIApplicationMain //调用了OC中的UIApplicationMain函数;是iOS应用程序的入口; 功能: 1.创建了一个UIApplication对象,代表当前应用程(作用是用来检测当前应用程序状态的改变)。2.创建一个遵守UIApplicationDelegate的协议的类的对象作为UIApplication的代理(作用处理应用程序状态的改变,实质创建AppDelegate对象并且设置为UIApplication对象的代理)
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
//1. 当应用程序启动成功后,会自动调用这个方法
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// 1.在这个方法中来创建应用程序中的所有的界面
// 2.获取应用程序需要展示的数据
// 3.使用界面展示数据
// 注意:如果不在这个文件中创建window,那么程序会通过Main.storyboard去创建应用程序的界面
print("启动成功")
return true
}
// 2. 当应用程序将要非活跃状态的时候会自动调用这个方法。
// 活跃状态:程序在屏幕上可见
// 非活跃状态:程序没有显示在屏幕上(a.按home键进入后台。b.来电打断。c.在当前应用程序中打开其它的应用程序)
func applicationWillResignActive(application: UIApplication) {
// 在这个方法中一般去暂停视频/音频播放;游戏需要暂停游戏;保存数据
print("将要成为非活跃状态")
// 按home键:command + shift + h
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
// 3. 应用程序已经进入后台的时候会自动调用
// 进入后台按home键
func applicationDidEnterBackground(application: UIApplication) {
print("进入后台")
}
// 4.应用程序将要进入前台的时候会自动调用的方法
// 进入前台:
func applicationWillEnterForeground(application: UIApplication) {
print("将要进入前台")
}
// 5.应用程序已经变成活跃状态的时候会自动调用
// a.程序启动成功之后 b.程序从后台重新进入前台 c.来电打断结束...
func applicationDidBecomeActive(application: UIApplication) {
print("已经变成活跃状态")
}
// 6.应用程序将要终止的时候会调用的方法
//
func applicationWillTerminate(application: UIApplication) {
print("应用程序将要终止")
}
如何用代码的形式加载windows窗口
class AppDelegate: UIResponder, UIApplicationDelegate {
// UIWindow:UIView
// window:窗口,一个应用程序想要展示在屏幕上,至少要有一个window,一个手机应用程序一般只有一个window
// 应用程序中的所有界面全部是展示在window上的
var window: UIWindow?
// 1.程序已经启动
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// 1.创建UIWindow对象
// frame 是UIView中的属性,确定视图显示在屏幕上的位置和大小
// UIScreen.mainScreen() 拿到手机屏幕
self.window = UIWindow.init(frame: UIScreen.mainScreen().bounds)
// 2.设置根视图控制器
self.window?.rootViewController = UIViewController()
self.window?.backgroundColor = UIColor.yellowColor()
// Override point for customizatio n after application launch.
return true
}
}
UIView基本属性和方法
// UIView:是iOS 中所有控件(视图)直接/间接的父类;所以UIView的属性和方法,对其他类型的视图都有效
// 视图:在屏幕上能看到的所有的东西都属于视图
// 1.创建UIView的对象
0let redView = UIView()
// 2. 想要将视图展示在屏幕上的两个条件;
// a.必须设置坐标和大小(默认坐标是(0,0)大小(0,0))
// b.将视图添加到已经展示在屏幕上的视图
// 设置frame的(x,y)和(width,height)两个部分组成
// redView.frame = CGRect(x: 10, y: 10, width: 100, height: 100)
// iOS 中所有的结构体都有一个对应的Make方法用来快速的创建一个结构体变量
redView.frame = CGRectMake(10, 10, 100, 100)
// 3.将视图添加到界面上
self.view.addSubview(redView)
// 4.设置背景颜色
// 视图的背景颜色默认是透明色
// 颜色创建的方式:
// a.通过类型方法创建指定颜色
redView.backgroundColor = UIColor.redColor()
// b.通过三原色来创建颜色
// CGFloat就是UI中的浮点型
// 参数1,2,3:红,绿,蓝的值(0~1) 4:透明度(0~1)
// redView.backgroundColor = UIColor.init(red: 0.35, green: 0.45, blue: 0.75, alpha: 0.88)
// redView.backgroundColor = UIColor.init(white: 0.4, alpha: 1)
// 练习:创建一个黄色的矩形,显示在红色视图的中间位置,大小是(50,50)
// 方式1:
// let yellowView = UIView(frame: CGRectMake(35,35,50,50))
// yellowView.backgroundColor = UIColor.yellowColor()
// self.view.addSubview(yellowView)
// 方式2:
let yellowView = UIView(frame: CGRectMake(25,25,50,50))
yellowView.backgroundColor = UIColor.yellowColor()
// 添加到红色视图上
redView.addSubview(yellowView)
// 总结:计算视图的坐标的时候,注意相对性。当前视图被添加到哪个视图上,那么当前视图的坐标就是相对于谁来算的
}
与frame相关的属性
// 创建一个视图
let redView = UIView()
// 添加到界面上
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 = CGPoint(x: 200, y: 200)
print(redView.center)
// 3.bounds(坐标和大小)
// 默认情况下bounds的坐标 是(0,0)大小和视图的frame大小一样
print(redView.bounds)
// 了解:
// 如果改变bounds的大小,frame的大小和坐标都改变,center不变
// 如果改变bounds的坐标,不影响当前视图的位置。但是影响添加到当前视图上的子视图的坐标,不建议修改bounds
// redView.bounds = CGRect(x: 0, y: 0, width: 200, height: 200)
// 4.transform(形变)
// 当前视图发生形变,那么添加到当前视图上的所有视图都会跟着一起形变
// a.缩放
// 参数1:x方向上的缩放比例
// 参数2:y方向上的缩放比例
// redView.transform = CGAffineTransformMakeScale(0.8, 2.5)
// b.旋转
// 参数:旋转角度(圆周率对应的角度)
// redView.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
// c.平移
// 参数1:在x方向上平移的距离
// 参数2:在y方向上平移的距离
// redView.transform = CGAffineTransformMakeTranslation(100, 100)
// d.多个形变同时发生
// 在另外一个形变的前提下旋转
// 参数1:另外一个形变
redView.transform = CGAffineTransformRotate(CGAffineTransformMakeScale(0.5, 0.5), CGFloat(M_PI_4))
// 在另外一个形变的前提下平移
redView.transform = CGAffineTransformTranslate(redView.transform, 0, 300)
// 在另外一个形变的前提下缩放
// 创建一个平移的形变
let transLation = CGAffineTransformMakeTranslation(100, 0)
redView.transform = CGAffineTransformScale(transLation, 0.5, 2 )
// 组合两个变形
// 将旋转形变和平移形变组合
let rotate = CGAffineTransformMakeRotation(0.2)
let transLation1 = CGAffineTransformMakeTranslation(100, 100)
redView.transform = CGAffineTransformConcat(transLation1, rotate)