一臉懵逼的我。
UIView父子視圖
還是通過代碼來理解吧:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//1.創(chuàng)建一個UIView對象
let redView = UIView.init(frame: CGRectMake(100, 100, 200, 200))
//2.設置背景顏色
redView.backgroundColor = UIColor.redColor()
//3.添加到界面上
//self.view就是redView的父視圖,redView就是self.view的子視圖
self.view.addSubview(redView)
//4.設置tag值,默認都是0.設tag值的時候值必須要大于0
//tag的作用是用來區(qū)分界面上不同的視圖
redView.tag = 100
//MARK: - 父子視圖的特點和方法
//再創(chuàng)建一個黃色視圖
let yellowView = UIView.init(frame: CGRectMake(0, 0, 50, 50))
yellowView.backgroundColor = UIColor.yellowColor()
yellowView.tag = 101
//1.一個視圖只有一個父視圖糜颠,可以有多個子視圖
//連續(xù)將同一個視圖添加到兩個視圖上汹族,最后一次添加有效
redView.addSubview(yellowView)
self.view.addSubview(yellowView)
//2.獲取一個視圖的父視圖
let superView = redView.superview
superView?.backgroundColor = UIColor.greenColor()
//3.獲取一個視圖的所有的子視圖
let subViews = self.view.subviews
//拿到所有的子視圖中的紅色視圖和黃色視圖
//a.
for item in subViews {
//判斷item是否是UILabel類型的。如果是就返回true,如果不是就返回false
if item.isKindOfClass(UILabel.self) {
print(item)
}
}
//b.
for item in subViews {
if item.tag == 100 {
print("紅色視圖")
//將紅色視圖的背景顏色變成橙色
item.backgroundColor = UIColor.orangeColor()
}
if item.tag == 101 {
print("黃色視圖\(item)")
}
}
//4.通過tag值拿到指定的子視圖
let subView2 = self.view.viewWithTag(101)
subView2?.frame.origin.y = 100
}
}
視圖的層次關系
代碼示例:
mport UIKit
class ViewController: UIViewController {
//MARK: - 生命周期方法
override func viewDidLoad() {
super.viewDidLoad()
self.creatUI()
}
//MARK: - 創(chuàng)建界面
func creatUI() {
//結論:在一個視圖上忌警,添加多個子視圖的時候箕速,子視圖之間如果有公共的部分字柠。那么后添加的子視圖會覆蓋先添加的
//1.一般情況下,如果想要將一個視圖顯示在最下面常柄,就最先添加哨颂。想要顯示在最上面就最后添加
//創(chuàng)建視圖
let view1 = self.creatView(CGRectMake(50, 100, 100, 100), backColor: UIColor.yellowColor())
let view2 = self.creatView(CGRectMake(100, 150, 100, 100), backColor: UIColor.redColor())
let view3 = self.creatView(CGRectMake(150, 200, 100, 100), backColor: UIColor.greenColor())
let view4 = self.creatView(CGRectMake(180, 130, 100, 100), backColor: UIColor.purpleColor())
//2.將指定的視圖放到最上層
self.view.bringSubviewToFront(view2)
//3.將指定的視圖放到最下層
self.view.sendSubviewToBack(view2)
//4.將指定的視圖插入到另一個視圖的上面
self.view.insertSubview(view2, aboveSubview: view3)
//5.將指定的視圖插入到另外一個視圖的下面
self.view.insertSubview(view2, belowSubview: view1)
}
//創(chuàng)建視圖
func creatView(frame:CGRect,backColor:UIColor)->UIView {
//創(chuàng)建視圖對象
let subView = UIView.init(frame: frame)
//設置背景顏色
subView.backgroundColor = backColor
//添加到界面上
self.view.addSubview(subView)
//將創(chuàng)建的視圖返回
return subView
}
}
UIView動畫
代碼示例:
import UIKit
class ViewController: UIViewController {
//MARK: - 屬性
let subView = UIView()
let subView2: UIView? = nil
//MARK: - 生命周期
override func viewDidLoad() {
super.viewDidLoad()
//創(chuàng)建視圖
subView.frame = CGRectMake(0, 0, 100, 100)
subView.center = self.view.center
subView.backgroundColor = UIColor.greenColor()
self.view.addSubview(subView)
//切圓角
self.layerAction()
//使用動畫
self.UIViewAnimation4()
}
//MARK: - Layer屬性
func layerAction() {
//layer屬性是負責視圖的形狀(顯示)
//1.切圓角
//當圓角的值為正方形的寬的一半附迷,就可以切一個圓
self.subView.layer.cornerRadius = 50
//2.設置邊框
self.subView.layer.borderWidth = 3
self.subView.layer.borderColor = UIColor.redColor().CGColor
}
//MARK: - 動畫方法
//UIView的動畫使用來動畫的改變視圖的frame相關屬性买喧、背景顏色瞬项、透明度
//方法4:
func UIViewAnimation4() {
//參數(shù)1:動畫時間
//參數(shù)2:延遲時間
//參數(shù)3:彈簧的壓力系數(shù)
//參數(shù)4:彈簧初始的加速度
//參數(shù)5:選項
//參數(shù)6:設置動畫結束時視圖的狀態(tài)
//參數(shù)7:動畫結束后要執(zhí)行的閉包
UIView.animateWithDuration(2, delay: 1, usingSpringWithDamping: 0.1, initialSpringVelocity: 0, options: [ .Repeat, .Autoreverse], animations: {
//注意:對于有圓角的視圖,改變大小而又不影響形狀候齿,只能通過形變去縮放周霉。不能直接改變frame中的size
self.subView.transform = CGAffineTransformMakeScale(0.5, 0.5)
}, completion: nil)
}
//方法3:
func UIViewAnimation3() {
//參數(shù)1:動畫時間
//參數(shù)2:延遲時間
//參數(shù)3:選項,Repeat->動畫重復執(zhí)行,Autoreverse->自動回到動畫開始的狀態(tài)
//參數(shù)4:設置動畫結束時視圖狀態(tài)的閉包
//參數(shù)5:整個動畫過程完成后需要執(zhí)行的閉包
UIView.animateWithDuration(2, delay: 1, options: [ .Repeat, .Autoreverse], animations: {
self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
}, completion: nil)
}
//方法2:
func UIViewAnimation2(){
//參數(shù)3:整個動畫完成后會自動調用這個閉包
UIView.animateWithDuration(2, animations: {
self.subView.transform = CGAffineTransformMakeTranslation(0, -200)
}) { (_) in
//寫動畫結束后需要執(zhí)行的代碼
UIView.animateWithDuration(2, animations: {
self.subView.transform = CGAffineTransformMakeTranslation(0, 0)
})
}
}
//方法1:
func UIViewAnimation1() {
//功能:執(zhí)行這個方法前視圖的狀態(tài),動畫的切換到閉包里面設置的最終狀態(tài)
//參數(shù)1:動畫時間(單位:秒)
//參數(shù)2:閉包食寡,設置動畫結束時視圖的狀態(tài)
UIView.animateWithDuration(2) {
//在這兒來設置視圖動畫結束時的狀態(tài)
//a.動畫的改變視圖的坐標
self.subView.frame.origin.y = 50
//b.動畫的改變視圖的大小
//self.subView.frame.size = CGSizeMake(50, 50)
self.subView.transform = CGAffineTransformMakeScale(0.5, 0.5)
//c.動畫的改變視圖的背景顏色
self.subView.backgroundColor = UIColor.redColor()
//d.動畫的改變視圖的透明度(0~1)
self.subView.alpha = 0.3
}
}
}
UILabel基礎
代碼示例:
import UIKit
class ViewController: UIViewController {
//MARK: - 生命周期
override func viewDidLoad() {
super.viewDidLoad()
self.creatLabel()
}
//MARK: - 創(chuàng)建Label
func creatLabel() {
//UILabel:UIView -> UIView的屬性和方法伤为,UILabel都擁有
//=======從UIView繼承下來的屬性=======
//1.創(chuàng)建UILabel對象
let label = UILabel.init(frame: CGRectMake(100, 100, 200, 300))
//2.添加到界面上
self.view.addSubview(label)
//3.設置背景顏色
label.backgroundColor = UIColor.yellowColor()
//========UILabel的專有屬性=========
//1.text屬性
//設置label上顯示的文字
label.text = "hello world 你好世界"
//拿到label上當前顯示的文字
print(label.text)
//2.設置字體(字體大小默認是:17)
//使用系統(tǒng)字體,設置字體大小
label.font = UIFont.systemFontOfSize(17)
//使用系統(tǒng)字體僚祷,設置字體大小和粗細
//參數(shù)1:字體大小
//參數(shù)2:字體粗細(小于1)
label.font = UIFont.systemFontOfSize(17, weight: 0.2)
//使用系統(tǒng)黑體奸绷,設置字體大小
label.font = UIFont.boldSystemFontOfSize(17)
//使用系統(tǒng)斜體憨愉,設置字體大小
label.font = UIFont.italicSystemFontOfSize(17)
//獲取系統(tǒng)所有字體的字體名
//75
print(UIFont.familyNames(),UIFont.familyNames().count)
//參數(shù)1:字體名
//參數(shù)2:字體大小
label.font = UIFont.init(name: "FZJKai-Z03S", size: 17)
//總結使用自己的字體的步驟:
//1.將ttf文件拖到工程中
//2.在info.plist文件中添加鍵值對"Fonts provided by application",將字體添加到系統(tǒng)字體庫中
//3.通過提供字體名的構造方法去創(chuàng)建字體(先要找到自己添加的字體的字體名)
//3.設置文字顏色
label.textColor = UIColor.redColor()
//4.設置陰影顏色
label.shadowColor = UIColor.blackColor()
//5.設置陰影的偏移效果
label.shadowOffset = CGSizeMake(-1, -1)
//6.設置文字的對齊模式(默認是左對齊)
//Center -> 居中
//Right -> 右對齊
//Left -> 左對齊
label.textAlignment = .Left
label.text = "default is NSLineBreakBy TruncatingTail used for single and multiple lines of text 這樣就用代碼實現(xiàn)了label的創(chuàng)建贷笛,其中initWithFrame設置了label的位置還有大小革娄,奧斯卡的積分換空間和"
//7.設置行數(shù)
label.numberOfLines = 5
//自動換行
label.numberOfLines = 0
//8.設置換行模式
//ByWordWrapping -> 以單詞為單位換行
//ByCharWrapping -> 以字符為單位換行
//...
label.lineBreakMode = .ByCharWrapping
}
}
根據(jù)文字設置label的大小
代碼示例:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//需要顯示在label上的文字
let str = "收到回復asdfsajfdkl刷卡費上"
//計算顯示指定文字所需要的最小空間
//1.將swift的字符串轉換成OC的字符串
let ocStr = str as NSString
//2.計算字符串的大小
//參數(shù)1:限制顯示當前字符串的最大寬度和最大高度
//參數(shù)2:設置渲染方式(UsesLineFragmentOrigin)
//參數(shù)3:確定文字的字體(大小)
//NSFontAttributeName ->字體對應的key值
//NSForegroundColorAttributeName -> 文字顏色對應的key值
let strSize = ocStr.boundingRectWithSize(CGSizeMake(100, 1000000000), options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName:UIFont.systemFontOfSize(17)], context: nil).size
print(strSize)
//3.創(chuàng)建label顯示文字
let label = UILabel.init(frame: CGRectMake(100, 100, strSize.width, strSize.height))
label.backgroundColor = UIColor.yellowColor()
self.view.addSubview(label)
label.text = str
//自動換行
label.numberOfLines = 0
}
}