【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )
文章目錄
- 一. 代碼生成控件
- 1. 創(chuàng)建設(shè)置項(xiàng)目
- ( 1 ) 創(chuàng)建項(xiàng)目 ( ① 選擇 Create a new Xcode project | ② 創(chuàng)建 Single View Application 項(xiàng)目 | ③ 設(shè)置項(xiàng)目信息 | ④ 設(shè)置代碼路徑并創(chuàng)建 )
- ( 2 ) 界面設(shè)置 ( ① 選中 ViewController | ② 屬性查看器 -> Simulated Metrics -> Size | ③ 設(shè)置 iPhone 4.7-inch )
- 2. 設(shè)置按鈕及添加事件
- ( 1 ) 添加按鈕事件 ( Control + 左鍵 拖動(dòng)到 代碼中 生成按鈕方法 )
- ( 2 ) 修改按鈕文字 ( ① 雙擊控件 | ② 修改 Tittle 屬性 )
- 3. 生成 UIView 控件 并 查看 View 層級(jí)
- ( 1 ) 代碼 生成 UIView 控件 ( ① 創(chuàng)建控件 | ② 設(shè)置 frame | ③ 設(shè)置顏色 | ④ 添加控件 )
- ( 2 ) 運(yùn)行并查看效果 ( 查看 View 層次 )
- 4. 代碼生成按鈕 并 綁定事件
- ( 1 ) 代碼生成 按鈕 ( ① 創(chuàng)建按鈕控件 | ② 設(shè)置 frame | ③ 設(shè)置文字( 顏色 ) | ④ 設(shè)置背景( 前景 )圖片 | ⑤ 綁定事件 | ⑥ 添加控件 )
- 二. UIView 屬性 和 子控件操作
- ( 1 ) 創(chuàng)建 設(shè)置 應(yīng)用 ( ① 創(chuàng)建應(yīng)用 | ② 設(shè)置界面尺寸 )
- ( 2 ) 設(shè)置 Main.storyboard UI 界面 ( ① 背景 )
- ( 3 ) 在 ViewController.m 關(guān)聯(lián) 控件變量 ( ① 按住 Control 拖拽 控件 到 @interface 代碼塊中 | ② Connect 對(duì)話框 設(shè)置 名稱 類型 )
- ( 4 ) 生成 子組件 代碼 ( ① 生成子組件 | ② 設(shè)置子組件屬性 | ③ 設(shè)置子組件 frame 屬性 [ 隨機(jī)位置生成 ] | ④ 添加子組件到父容器中 )
- ( 5 ) 刪除 子組件 代碼 ( ① 獲取子組件數(shù)組 | ② 使用 for in 循環(huán)刪除子組件 | ③ isKindOfClass 判定組件類型 )
- ( 6 ) 刪除 指定 Tag 的控件 的 代碼 ( ① 調(diào)用父控件的 viewWithTag 方法 | ② )
- ( 7 ) UIView 常用方法屬性 ( ① tag 屬性 | ② removeFromSuperView 方法 | ③ addSubView 方法 | ④ viewWithTag 方法 | ⑤ frame 屬性 | ⑥ transform 屬性 )
- ( 8 ) 效果展示
- 三. 圖片瀏覽器
- 1. 應(yīng)用創(chuàng)建 設(shè)置
- ( 1 ) 創(chuàng)建 設(shè)置 應(yīng)用 ( ① 創(chuàng)建應(yīng)用 | ② 設(shè)置界面尺寸 )
- 2. UI 控件 設(shè)置
- ( 1 ) 設(shè)置 Main.storyboard ( 拖入相關(guān)控件 )
- ( 2 ) 關(guān)聯(lián) Main.storyboard 與 ViewController.m ( ① 關(guān)聯(lián)控件變量 | ② 關(guān)聯(lián)方法 | ③ 設(shè)置相關(guān)的成員變量 )
- 3. 相關(guān)知識(shí)點(diǎn)
- ( 1 ) UILabel 設(shè)置 ( ① 換行設(shè)置 | ② 設(shè)置行高 | ③ 寬高控制 )
- ( 2 ) UIButton 啟用 禁用 ( ① enabled 屬性 YES NO )
- ( 3 ) NSArray 和 NSMutableDictionary 存儲(chǔ)數(shù)據(jù) ( ① NSArray 數(shù)組 | ② 字典 )
- 4. 代碼邏輯 與 完整代碼
- ( 1 ) 代碼邏輯 ( ① 邊界處理 | ② 按鈕處理 | ③ UILabel 文字切換 | ④ UIImageView 圖片切換 )
- ( 2 ) 完整代碼
- ( 3 ) 效果展示
- 四. Storyboard 添加 配置 及 相關(guān)知識(shí)點(diǎn)
- 1. 添加 新界面 ( ① 新建 Storyboard | ② 配置 Storyboard | ③ 新建ViewController 代碼 )
- ( 1 ) 添加 Storyboard ( ① File -> New -> File | ② iOS -> User Interface -> Storyboard | ③ General -> Deployment -> Main Interface 配置 Storyboard )
- ( 2 ) Storyboard 設(shè)置 ( ① 拖動(dòng)箭頭設(shè)置啟動(dòng)界面 | ② View Controller 的 Is Initial View Controller 勾選框 設(shè)置啟動(dòng)界面 | ③ 關(guān)聯(lián) ViewController 代碼 )
- ( 3 ) 新建 ViewController.m 文件 ( ① File -> New -> File | ② iOS -> Source -> Cocoa Touch Class | ③ Storyboard 中 身份查看器 配置 Class )
- 2. Storyboard 相關(guān)知識(shí)點(diǎn) ( ① 刪除 Storyboard | ② Storyboard 本質(zhì) )
- ( 1 ) 刪除 Storyboard ( ① 刪除文件及引用 | ② 刪除引用 文件保留 )
- ( 2 ) Storyboard 本質(zhì) ( XML 文本文件 )
- 3. iOS 應(yīng)用啟動(dòng)步驟簡(jiǎn)介
- ( 1 ) iOS 應(yīng)用啟動(dòng)步驟
- 五. Bundle 簡(jiǎn)介
- ( 1 ) Bundle 簡(jiǎn)介
- ( 2 ) 圖片放置 位置 ( ① 放在 Assets.xcassets [推薦] | ② 放在根目錄[不推薦] )
- ( 3 ) NSBundle 使用 ( ① 獲取 NSBundle 對(duì)象 | ② 獲取 Bundle 目錄下 某文件的 全路徑 )
- 六. Property List 簡(jiǎn)介
- ( 1 ) Property List 創(chuàng)建 ( ① New File | ② iOS -> Resource -> Property List | ③ 數(shù)據(jù)設(shè)置 | ④ 類型設(shè)置 )
- ( 2 ) 獲取 Property List 數(shù)據(jù) ( ① 獲取 Bundle PList 路徑 | ② dictionaryWithContentsOfFile 初始化字典 | ③ 查看數(shù)據(jù) )
- ( 3 ) Property List 多種類型 數(shù)據(jù) 設(shè)置 獲取 ( ① 設(shè)置 Root 類型為 NSArray | ② 設(shè)置 多類型 數(shù)據(jù) | ③ 獲取 PList 的 Bundle 路徑 | ④ 初始化 數(shù)組 | ⑤ 打斷點(diǎn)查看數(shù)據(jù) )
- 七. 優(yōu)化 圖片 瀏覽器 ( ① 使用 PList | ② 懶加載 )
- ( 1 ) 使用 PList 存儲(chǔ) 數(shù)據(jù) ( ① 創(chuàng)建 PList 文件 | ② 數(shù)據(jù)準(zhǔn)備 | ③ 獲取 Bundle 路徑 | ④ 獲取 PList 的 Bundle 路徑 | ⑤ PList -> 數(shù)組 )
- ( 2 ) 懶加載 優(yōu)化 ( ① 在 get 方法中加載數(shù)據(jù) | ② 如果為 空 才 加載 )
- 八. UIImageView 播放動(dòng)畫(huà) 及 內(nèi)存優(yōu)化
- 1. 動(dòng)畫(huà) 播放
- ( 1 ) UIImageView 動(dòng)畫(huà) 相關(guān)屬性 ( ① 圖片數(shù)組 | ② 動(dòng)畫(huà)時(shí)長(zhǎng) | ③ 重復(fù)次數(shù) )
- ( 2 ) UIImageView 動(dòng)畫(huà) 相關(guān)方法 ( ① 開(kāi)始播放 | ② 停止播放 | ③ 是否正在播放 )
- ( 3 ) UIImageView 動(dòng)畫(huà) 執(zhí)行流程 ( ① 準(zhǔn)備 UIImage 數(shù)組 | ② 設(shè)置動(dòng)畫(huà)參數(shù) UIImage數(shù)組 時(shí)長(zhǎng) 重復(fù)次數(shù) | ③ 啟動(dòng)動(dòng)畫(huà) )
- 2. 圖片內(nèi)存 優(yōu)化
- ( 1 ) UIImageView 動(dòng)畫(huà) 內(nèi)存 查看 ( ① Debug Navigator 查看內(nèi)存 | ② 查看 動(dòng)畫(huà)播放前后的內(nèi)存變化 | ③ 分析內(nèi)存不釋放的原因 )
- ( 2 ) UIImage 內(nèi)存分析 ( ① 使用 UIImage imageNamed:圖片名稱 加載圖片 | ② 使用 UIImage imageWithContentsOfFile:Bundle路徑名 加載圖片 )
- ( 3 ) 內(nèi)存優(yōu)化 的 動(dòng)畫(huà) 執(zhí)行 完整流程 ( ① 準(zhǔn)備 UIImage 數(shù)組 | ② 設(shè)置動(dòng)畫(huà)參數(shù) UIImage數(shù)組 時(shí)長(zhǎng) 重復(fù)次數(shù) | ③ 啟動(dòng)動(dòng)畫(huà) | ④ 異步設(shè)置圖片數(shù)組為 nil )
- ( 4 ) NSBundle pathForResource 為 nil 解決方案 ( ① 拖入目錄 選擇 Create gropus | ② 查看 Xcode 項(xiàng)目 配置 -> Build phases 的 Bundle 配置 )
- ( 5 ) 效果展示
博客相關(guān)資源 :
- 1.CSDN下載地址 : https://download.csdn.net/download/han1202012/10956883
一. 代碼生成控件
1. 創(chuàng)建設(shè)置項(xiàng)目
( 1 ) 創(chuàng)建項(xiàng)目 ( ① 選擇 Create a new Xcode project | ② 創(chuàng)建 Single View Application 項(xiàng)目 | ③ 設(shè)置項(xiàng)目信息 | ④ 設(shè)置代碼路徑并創(chuàng)建 )
項(xiàng)目創(chuàng)建流程 : ① 選擇 Create a new Xcode project , ② 創(chuàng)建 Single View Application 項(xiàng)目 , ③ 設(shè)置項(xiàng)目信息 , ④ 設(shè)置代碼路徑并創(chuàng)建 ;
- 1.選擇項(xiàng)目創(chuàng)建 : 在 Xcode 歡迎界面中 , 點(diǎn)擊 Create a new Xcode project 選項(xiàng) ;
- 2.選擇項(xiàng)目類型 : 在 Choose a template for your new project 對(duì)話框中 , 選擇項(xiàng)目類型 iOS -> Application -> Single View Application 項(xiàng)目 ;
- 3.設(shè)置項(xiàng)目名稱 : 輸入 項(xiàng)目 相關(guān)的 信息 , 主要是 項(xiàng)目名稱 ;
- 4.選擇代碼存放路徑 : 選擇代碼存放路徑 , 點(diǎn)擊 Create 按鈕, 創(chuàng)建項(xiàng)目 ;
( 2 ) 界面設(shè)置 ( ① 選中 ViewController | ② 屬性查看器 -> Simulated Metrics -> Size | ③ 設(shè)置 iPhone 4.7-inch )
界面設(shè)置 : 需要自己手動(dòng)設(shè)定一個(gè) 屏幕尺寸 ;
- 1.創(chuàng)建后的默認(rèn) UI 設(shè)計(jì)界面 : 創(chuàng)建項(xiàng)目完成后, Main.storyboard 中顯示的是一個(gè)正方形的 界面 , 需要將其設(shè)置為 一個(gè) 手機(jī)形狀的 UI 界面 ;
- 2.設(shè)置成 4.7 寸屏幕大小 : ① 選中 ViewController 圖標(biāo) , ② 設(shè)置 右側(cè) 的 屬性查看器 -> Simulated Metrics -> Size , ③ 選擇 iPhone 4.7-inch 屏幕大小 ;
- 3.iPhone 尺寸 : ① iPhone 5 , 5S , SE : 4-inch ( 對(duì)角線長(zhǎng)度 ) , ② iPhone 6 , 6S , 7 : 4.7-inch ( 對(duì)角線長(zhǎng)度 ) , ③ iPhone 6 Plus , 6s Plus , 7Plus : 5.5-inch ( 對(duì)角線長(zhǎng)度 ) ;
2. 設(shè)置按鈕及添加事件
( 1 ) 添加按鈕事件 ( Control + 左鍵 拖動(dòng)到 代碼中 生成按鈕方法 )
添加按鈕事件 :
- 1.添加按鈕 : 向 Main.storyboard 中拖入按鈕控件 ;
- 2.生成按鈕方法 :
- ① 打開(kāi)輔助編輯器 : 同時(shí)顯示 Main.storyboard 和 ViewController.m 代碼 ;
- ② 拖動(dòng)生成方法 : 按住 Control 鍵 , 左鍵點(diǎn)擊 Button 控件不放 , 然后拖動(dòng)到 ViewController.m 代碼空白處 ;
- ③ 設(shè)置方法屬性 :
- a . 在 Name 欄 設(shè)置 方法名稱 ;
- b . 在 Event 欄 設(shè)置 方法觸發(fā)動(dòng)作 ;
- c . Touch Up Inside 即 點(diǎn)擊方法 ;
- d . 在 Arguments 欄 設(shè)置需要傳入的參數(shù) :
- 1> 如果在方法中需要使用按鈕參數(shù) , 則選擇 Sender ,
- 2> 如果需要 按鈕 和 事件 參數(shù) , 選擇 Sender and Event ,
- 3> 如果不需要參數(shù) , 設(shè)置 None 即可 ;
- ④ 生成方法 : 點(diǎn)擊 上述 對(duì)話框中的 Connect 按鈕 , 即可生成對(duì)應(yīng)方法 ;
- 5.生成的代碼 :
( 2 ) 修改按鈕文字 ( ① 雙擊控件 | ② 修改 Tittle 屬性 )
修改按鈕文字 :
- 1.方法1 : 點(diǎn)擊選中 UIButton 控件, 然后再右側(cè)的屬性查看器中的 Tittle 屬性中修改按鈕文字 ;
- 2.方法2 : 在 Main.storyboard 中雙擊 UIButton 控件 , 修改 按鈕文字 ;
- 3.修改后 :
3. 生成 UIView 控件 并 查看 View 層級(jí)
( 1 ) 代碼 生成 UIView 控件 ( ① 創(chuàng)建控件 | ② 設(shè)置 frame | ③ 設(shè)置顏色 | ④ 添加控件 )
代碼生成 UIView 控件 :
- 1.創(chuàng)建 UIView 控件 : 使用 UIView 的 alloc init 方法 , 創(chuàng)建 UIView 控件 ;
- 2.修改 Frame 屬性 : 使用 CGRectMake 方法創(chuàng)建 CGRect 結(jié)構(gòu)體變量 , 并設(shè)置給 UIView 控件的 frame 屬性 ;
- 3.設(shè)置顏色 : 設(shè)置 UIView 的 backgroundColor 屬性 , 傳遞一個(gè) UIColor 對(duì)象 ;
- 4.添加 UIView 控件 : 獲取當(dāng)前 ViewController 的 根 View 組件 , 然后將 生成的 UIView 控件添加到 該 根 View 控件中 ;
- 5.總體代碼 :
( 2 ) 運(yùn)行并查看效果 ( 查看 View 層次 )
運(yùn)行并查看效果 :
-
1.運(yùn)行程序 : 點(diǎn)擊 Build and then run the current scheme 按鈕 , 運(yùn)行虛擬機(jī) ; 然后點(diǎn)擊 10 次 生成 10 個(gè) UIView 控件 ;
-
2.查看 創(chuàng)建的 View 層次 : 注意 該 步驟 必須在虛擬機(jī)運(yùn)行之后才能操作 , 點(diǎn)擊下方的 Debug View Hierarchy 按鈕 , 即可查看 View 層次 ;
-
3.查看 層次 : 鼠標(biāo) 按住 界面 , 左右拖動(dòng) , 即可看到生成的 10 個(gè) UIView 的層次 ;
4. 代碼生成按鈕 并 綁定事件
( 1 ) 代碼生成 按鈕 ( ① 創(chuàng)建按鈕控件 | ② 設(shè)置 frame | ③ 設(shè)置文字( 顏色 ) | ④ 設(shè)置背景( 前景 )圖片 | ⑤ 綁定事件 | ⑥ 添加控件 )
代碼生成 按鈕 :
- 1.創(chuàng)建按鈕控件 : 創(chuàng)建 UIButton 控件時(shí) , 需要制定按鈕類型 , 這里創(chuàng)建 Custom 類型的控件 ;
- 2.設(shè)置 frame 屬性 : 使用 CGRectMake 方法創(chuàng)建 CGRect 結(jié)構(gòu)體變量 , 并賦值給 按鈕的 frame 屬性 ;
- 3.設(shè)置按鈕文字 : 調(diào)用 setTittle 方法 , 設(shè)置生成的按鈕的文字 ;
- 4.設(shè)置文字顏色 : 調(diào)用 setTittleColor 方法 , 設(shè)置按鈕文字的顏色 ;
- 5.設(shè)置背景圖片 :
- ① 添加圖片資源 : 選中 Assets.xcassets , 從 Finder 中拖動(dòng)圖片資源 到 其中 ;
- ② 設(shè)置背景圖片 : 調(diào)用 setBackgroundImage 方法 , 設(shè)置背景圖片 ;
- ① 添加圖片資源 : 選中 Assets.xcassets , 從 Finder 中拖動(dòng)圖片資源 到 其中 ;
- 6.綁定事件 : 創(chuàng)建一個(gè)方法 , 然后調(diào)用 UIButton 的 addTarget 綁定該方法 ;
- 7.添加控件 : 獲取父控件 self.view , 調(diào)用父控件的 addView 方法 添加控件 ;
- 8.完整代碼示例 :
二. UIView 屬性 和 子控件操作
( 1 ) 創(chuàng)建 設(shè)置 應(yīng)用 ( ① 創(chuàng)建應(yīng)用 | ② 設(shè)置界面尺寸 )
創(chuàng)建 設(shè)置 應(yīng)用 :
- 1.創(chuàng)建應(yīng)用 : ① 點(diǎn)擊 Create a new Xcode project 應(yīng)用 ; ② 創(chuàng)建 Single View Application 項(xiàng)目 ; ③ 設(shè)置 項(xiàng)目名稱 , 組織標(biāo)識(shí) 等信息 ; ④ 設(shè)置代碼路徑 ; 參考 一 . 1 . ( 1 ) 章節(jié)內(nèi)容 ;
- 2.設(shè)置界面尺寸 : ① Main.storyboard 界面中 選中 ViewController ; ② 在 屬性查看器中設(shè)置 Size 屬性為 iPhone 4.7-inch ; ③ 在 文件查看器 中取消 Use Auto Layout 選項(xiàng) ;
( 2 ) 設(shè)置 Main.storyboard UI 界面 ( ① 背景 )
設(shè)置 Main.storyboard 界面 :
- 1.設(shè)置背景顏色 : 選中 ViewController 下的 根 View 控件 , 在 屬性查看其中 設(shè)置 Background 屬性 , 設(shè)置一個(gè)顏色 ;
- 2.向界面中添加一個(gè) View 控件 : 添加 View 控件 當(dāng)做容器 , 設(shè)置尺寸 300 x 300 , 居中顯示 , 之后將生成的 UIView 控件放在該 容器 中 ;
- 3.添加按鈕 : 添加兩個(gè)按鈕 , 兩個(gè)按鈕的功能分別是 生成 UIView 控件 和 清空 UIView 控件 ;
( 3 ) 在 ViewController.m 關(guān)聯(lián) 控件變量 ( ① 按住 Control 拖拽 控件 到 @interface 代碼塊中 | ② Connect 對(duì)話框 設(shè)置 名稱 類型 )
關(guān)聯(lián) ViewController.m 變量 :
-
1.拖線關(guān)聯(lián) : 按住 Control 鍵 不放 , 然后拖線到 ViewController.m 中的 @interface 代碼塊中 , 之后會(huì)彈出 Connect 對(duì)話框 ;
-
2.設(shè)置變量信息 : 在 Connect 對(duì)話框中 設(shè)置 名稱 和 類型 , 然后點(diǎn)擊 Connect 按鈕 , 然后生成代碼 ;
-
3.查看生成的代碼 : 點(diǎn)擊 Connect 按鈕后 , 會(huì)自動(dòng)根據(jù) 類型 和 變量名 生成 對(duì)應(yīng)的 代碼 ;
( 4 ) 生成 子組件 代碼 ( ① 生成子組件 | ② 設(shè)置子組件屬性 | ③ 設(shè)置子組件 frame 屬性 [ 隨機(jī)位置生成 ] | ④ 添加子組件到父容器中 )
生成子組件代碼 :
- 1.創(chuàng)建子組件 : 調(diào)用 UILabel 的 alloc init 方法 , 生成子組件 ;
- 2.設(shè)置子組件 : 設(shè)置子組件信息 , 為 UILabel 設(shè)置文字 ;
- 3.設(shè)置 frame 屬性 : 設(shè)置隨機(jī)的位置 , 使用 arc4random_uniform 函數(shù)生成隨機(jī)數(shù) , x 坐標(biāo) 和 y 坐標(biāo)要使用不同的 隨機(jī)值 , 之后設(shè)置一個(gè) 寬高 即可 ;
- 4.添加到父容器 : 將代碼添加到 父容器 中 ;
- 5.整體代碼 :
( 5 ) 刪除 子組件 代碼 ( ① 獲取子組件數(shù)組 | ② 使用 for in 循環(huán)刪除子組件 | ③ isKindOfClass 判定組件類型 )
刪除子組件代碼 :
- 1.獲取子組件數(shù)組 : 訪問(wèn) 父容器的 subViews 屬性 即可獲取 父容器所有的子組件, 該屬性在 UIView 中定義 ;
- 2.刪除子組件 : 使用 removeFromSuperView 方法 來(lái) 刪除控件 ;
- 3.控件類型準(zhǔn)備 : 父容器中添加 UIButton 組件 , 用于區(qū)分 UILabel 和 UIButton , 這里只刪除 UILabel 控件 ;
- 4.判定組件類型 : 使用 isKindOfClass 判斷 對(duì)象 類型 ;
- 5.刪除所有 UILabel 控件 : 使用 for in 循環(huán) 刪除所有的 UILabel 控件 ;
- 6.完整代碼 :
( 6 ) 刪除 指定 Tag 的控件 的 代碼 ( ① 調(diào)用父控件的 viewWithTag 方法 | ② )
刪除指定 Tag 的控件 :
- 1.生成方法 : 按住 Control 拖線關(guān)聯(lián) , 在 Connect 對(duì)話框 設(shè)置方法參數(shù) , 生成方法 ;
- 2.控件準(zhǔn)備 : 拖入 3 個(gè) Label 控件 , 分別設(shè)置 Tag 屬性 1 , 2, 3 ;
- 3.獲取子控件方法 : 調(diào)用父控件的 viewWithTag 方法 獲取指定 Tag 屬性的子組件 , 如果 父控件 的 Tag 與 子控件的 Tag 相同 , 也能獲取到 , 并且優(yōu)先獲取父控件 ; 如果刪除父控件 , 那么其子控件也會(huì)被全部刪除 ;
- 4.刪除控件 : 調(diào)用獲取的子控件的 removeFromSuperview 方法 , 刪除控件 ;
- 5.代碼示例 :
( 7 ) UIView 常用方法屬性 ( ① tag 屬性 | ② removeFromSuperView 方法 | ③ addSubView 方法 | ④ viewWithTag 方法 | ⑤ frame 屬性 | ⑥ transform 屬性 )
UIView 常用方法屬性 :
- 1.tag 屬性 : 用于標(biāo)示控件 , 不能改變控件外觀 ;
- 2.removeFromSuperView 方法 : 將 子控件 從 父控件 刪除 ;
- 3.addSubView 方法 : 向 父控件 中 添加子控件 , 還需要設(shè)置 Frame屬性 才能顯示 ;
- 4.viewWithTag 方法 : 獲取 指定 Tag 屬性的 子控件 , 如果 父控件 也是這個(gè) Tag , 那么優(yōu)先獲取自己 ;
- 5.frame 屬性 : 定義控件的位置 和 尺寸 ;
- 6.transform 屬性 : 改變 位置 , 大小 , 旋轉(zhuǎn)角度 屬性 ; 有兩種使用方式 , 一種是 直接創(chuàng)建指定所有參數(shù) ; 第二種 可以在之前的基礎(chǔ)上進(jìn)行增量修改 ;
( 8 ) 效果展示
效果展示 :
三. 圖片瀏覽器
1. 應(yīng)用創(chuàng)建 設(shè)置
( 1 ) 創(chuàng)建 設(shè)置 應(yīng)用 ( ① 創(chuàng)建應(yīng)用 | ② 設(shè)置界面尺寸 )
創(chuàng)建 設(shè)置 應(yīng)用 :
- 1.創(chuàng)建應(yīng)用 : ① 點(diǎn)擊 Create a new Xcode project 應(yīng)用 ; ② 創(chuàng)建 Single View Application 項(xiàng)目 ; ③ 設(shè)置 項(xiàng)目名稱 , 組織標(biāo)識(shí) 等信息 ; ④ 設(shè)置代碼路徑 ; 參考 一 . 1 . ( 1 ) 章節(jié)內(nèi)容 ;
- 2.設(shè)置界面尺寸 : ① Main.storyboard 界面中 選中 ViewController ; ② 在 屬性查看器中設(shè)置 Size 屬性為 iPhone 4.7-inch ; ③ 在 文件查看器 中取消 Use Auto Layout 選項(xiàng) ;
2. UI 控件 設(shè)置
( 1 ) 設(shè)置 Main.storyboard ( 拖入相關(guān)控件 )
設(shè)置 Main.storyboard 界面 :
- 1.準(zhǔn)備對(duì)應(yīng)控件 : 根據(jù)需求 拖入 對(duì)應(yīng)的控件 , 并設(shè)置相關(guān)屬性 ; 這里就不再詳細(xì)介紹 , 貼一張 設(shè)置好的控件 和 默認(rèn)文字 圖片 展示圖 ;
- 2.準(zhǔn)備素材 : 拖入 顯示的圖片 和 箭頭 等 圖片資源 ;
( 2 ) 關(guān)聯(lián) Main.storyboard 與 ViewController.m ( ① 關(guān)聯(lián)控件變量 | ② 關(guān)聯(lián)方法 | ③ 設(shè)置相關(guān)的成員變量 )
關(guān)聯(lián) Main.storyboard 與 ViewController.m :
- 1.關(guān)聯(lián)控件變量 : 按住 Control 鍵 , 將控件拖動(dòng)到 @interface 代碼區(qū)域 , 在彈出的對(duì)話框中輸入控件命令 和 選擇控件類型 , 即可生成控件關(guān)聯(lián)的變量 ;
- 2.關(guān)聯(lián) UIButton 點(diǎn)擊方法 : 按住 Control 鍵 , 將控件拖動(dòng)到 @implementation 代碼區(qū)域 , 在彈出的對(duì)話框中 輸入方法名稱 , 選擇控件類型 , 選擇觸發(fā)操作 , 選擇傳入的參數(shù) 即可生成點(diǎn)擊方法 ;
3. 相關(guān)知識(shí)點(diǎn)
( 1 ) UILabel 設(shè)置 ( ① 換行設(shè)置 | ② 設(shè)置行高 | ③ 寬高控制 )
UILabel 設(shè)置 :
- 1.設(shè)置自動(dòng)換行 : 在 UILabel 中有 Lines 屬性 , 可以設(shè)置顯示 幾行 文字 , Lines 屬性 設(shè)置 0 就會(huì)自動(dòng)進(jìn)行換行 ;
- 2.UILabel 行高設(shè)置 : 自動(dòng)換行的前提是 , UILabel 有對(duì)應(yīng)的多行的行高 , 如果 UILabel 高度很小只能顯示 1 行 , 那么 UILabel 自動(dòng)換行 也只是顯示 1 行 , 因此 如果需要自動(dòng)換行的話 , 需要給 UILabel 設(shè)置足夠的行高 ;
- 3.寬高控制 : UILabel 的 寬度 和 高度 都需要把握好 , 寬度如果不夠 , 后面會(huì)出現(xiàn) … 的 省略情況 , 同理 高度不足 也會(huì)出現(xiàn)這種情況 ;
( 2 ) UIButton 啟用 禁用 ( ① enabled 屬性 YES NO )
UIButton 的啟用 禁用 :
- 1.enabled 屬性 ( 可視化修改 ) : 在 UIButton 的 屬性查看器中 Control 模塊下 , Enabled 屬性用來(lái)設(shè)置 按鈕是否可用 , 如果 勾選 按鈕可用 , 反之 按鈕 會(huì)變灰 不可用 ;
- 2.源碼中查看 enabled 屬性 : 默認(rèn)是 YES 可用 , 如果設(shè)置為 NO 不可用 ;
- 3.代碼修改 enabled 屬性 : 方法中 直接修改 sender.enabled 屬性值 為 YES 或 NO , 即可修改 UIButton 是否可用 ;
( 3 ) NSArray 和 NSMutableDictionary 存儲(chǔ)數(shù)據(jù) ( ① NSArray 數(shù)組 | ② 字典 )
NSArray 和 NSMutableDictionary 存儲(chǔ)數(shù)據(jù) :
- 1.使用方法 : 定義一個(gè) NSArray 成員變量 , 其每個(gè)元素都是一個(gè) NSMutableDictionary 字典 , 字典中存放 兩個(gè) 鍵值對(duì) , 分別是 圖片名稱 和 圖片描述 ;
- 2.定義 NSArray 成員變量 : 使用 @property 定義 , 注意
- 3.初始化 NSArray 成員變量 : 先逐個(gè)創(chuàng)建對(duì)應(yīng)的 NSMutableDictionary 字典 , 然后將字典 當(dāng)做元素 放入 NSArray 數(shù)組中 , 數(shù)組中的每個(gè)元素都是一個(gè) 字典 ;
- 4.獲取 NSArray 中的元素 : 根據(jù)數(shù)組下標(biāo) [int] 獲取數(shù)組中的元素 ;
- 5.從 NSMutableDictionary 字典 中獲取對(duì)應(yīng)元素 : 獲取 NSMutableDictionary * d 字典中的 “pic” 鍵 對(duì)應(yīng)的值 d[@"pic"] , 獲取 字典 中 “des” 鍵 對(duì)應(yīng)的值 d[@"des"]
4. 代碼邏輯 與 完整代碼
( 1 ) 代碼邏輯 ( ① 邊界處理 | ② 按鈕處理 | ③ UILabel 文字切換 | ④ UIImageView 圖片切換 )
代碼邏輯 :
- 1.索引邊界處理 : 索引范圍 1 ~ 5 , 不能 小于 1 或者 大于 5 , 這里需要進(jìn)行限制 ; 點(diǎn)擊 向左 切換時(shí) 索引自減 , 當(dāng) 小于等于 1 時(shí) , 索引值 仍為 1 ; 點(diǎn)擊向右切換時(shí) , 索引 自增 , 當(dāng) 大于等于 5 時(shí) , 索引值 仍為 5 ;
- 2.按鈕處理 : UIButton 的 enabled 屬性 設(shè)置 YES NO 值 來(lái) 設(shè)置 可用 禁用 屬性 ; 顯示第一張圖片時(shí) , 左 按鈕 禁用 , 顯示 最后一張圖片時(shí) , 右 按鈕 禁用 ; 其它情況 左右按鈕 都可用 ;
- 3.UILabel 文字切換 : 直接 修改 UILabel 的 text 屬性 ;
- 4.文字生成格式 : 使用 NSString 的 stringWithFormat 方法 , 設(shè)置一個(gè) 字符串格式 , 使用 通配符 進(jìn)行 數(shù)據(jù)替換 ; 注意 NSArray 的 count 的通配符是 %lu ;
- 5.UIImageView 圖片切換 : 通過(guò) 調(diào)用 UIImage 的 imageNamed 方法 , 獲取 UIImage 對(duì)象 ;
( 2 ) 完整代碼
完整代碼 :
// // ViewController.m // 3.ImageBrowser // // Created by octopus on 19/2/11. // Copyright ? 2019年 han. All rights reserved. //#import "ViewController.h"@interface ViewController ()// 顯示圖片的索引 @property (weak, nonatomic) IBOutlet UILabel *indexLabel;// 顯示圖片 @property (weak, nonatomic) IBOutlet UIImageView *Image;// 左箭頭按鈕 @property (weak, nonatomic) IBOutlet UIButton *lastButton;// 右箭頭按鈕 @property (weak, nonatomic) IBOutlet UIButton *nextButton;// 圖片介紹 @property (weak, nonatomic) IBOutlet UILabel *imageDescription;// 當(dāng)前圖片索引 @property (assign, nonatomic) int index;// 用于保存所有圖片數(shù)據(jù)的數(shù)組 , 每個(gè)數(shù)組元素存放字典數(shù)據(jù) @property (strong, nonatomic) NSArray * pics;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 1. 初始化圖片名稱數(shù)組NSMutableDictionary * d1 = [NSMutableDictionary dictionary];d1[@"pic"]=@"1_Mustang";d1[@"des"]=@"Mustang(福特野馬)是美國(guó)福特汽車公司推出的2005款野馬汽車,最高時(shí)速232.2公里,設(shè)計(jì)源自2003 年汽車巡回展上的概念車,野馬的誕生標(biāo)志著美國(guó)僅存的大馬力轎車獲得了重生。";NSMutableDictionary * d2 = [NSMutableDictionary dictionary];d2[@"pic"]=@"2_Prado";d2[@"des"]=@"普拉多是一款進(jìn)口ORV,源于豐田享譽(yù)全球的LAND CRUISER車系,1996年豐田正式將LAND CRUISER FJ90命名為PRADO普拉多,即真正意義上的第一代普拉多。";NSMutableDictionary * d3 = [NSMutableDictionary dictionary];d3[@"pic"]=@"3_Camaro";d3[@"des"]=@"雪佛蘭 科邁羅(英文名:Chevrolet Camaro)設(shè)計(jì)于1960年,目前共發(fā)展了六代。1966年9月26日發(fā)布的1967款Camaro是以雪佛蘭Nova為原型而設(shè)計(jì)的。";NSMutableDictionary * d4 = [NSMutableDictionary dictionary];d4[@"pic"]=@"4_LandCru";d4[@"des"]=@"蘭德酷路澤【陸地巡洋艦】是豐田汽車出品的LAND CRUISER 200,是豐田公司生產(chǎn)的一款進(jìn)口ORV越野車(Off Road Vehicle) [1] ,它的外觀在繼承原有設(shè)計(jì)DNA的同時(shí)向具備新時(shí)代的“新鮮感·先進(jìn)性”風(fēng)格進(jìn)化。是四輪驅(qū)動(dòng),軸距2850毫米,四輪碟剎的硬派越野車。";NSMutableDictionary * d5 = [NSMutableDictionary dictionary];d5[@"pic"]=@"5_Mondeo";d5[@"des"]=@"福特蒙迪歐(Mondeo)是一款長(zhǎng)安福特旗艦車型,不僅搭載多項(xiàng)創(chuàng)新科技,并在至臻品質(zhì)、動(dòng)力系統(tǒng)以及安全性能等方面實(shí)現(xiàn)全面提升。";// 將字典放入數(shù)組中self.pics = @[d1, d2, d3, d4, d5];// 2. 初始化索引 為 1 , 并且執(zhí)行 第一次 圖片 切換 操作 , 顯示對(duì)應(yīng)的 圖片 , 索引 , 及 描述self.index = 1;[self showImage];}// 顯示 上一張 圖片 - (IBAction)lastImage:(UIButton *)sender {// 設(shè)置圖片索引 , 注意不能 小于 1 , 邊界控制self.index -- ;if(self.index <= 1){self.index = 1;}[self showImage]; }// 顯示 下一張 圖片 - (IBAction)nextImage:(UIButton *)sender {// 設(shè)置圖片索引 , 注意不能 超過(guò) 5 , 邊界控制self.index ++ ;if(self.index >= self.pics.count){self.index = (int)self.pics.count;}[self showImage]; }// 根據(jù) 當(dāng)前的 索引值 顯示指定的圖片 , 以及控制 左右 切換按鈕是否可用 - (void) showImage {// 1. 設(shè)置按鈕 禁用 啟用 , index 為 1 和 5 時(shí) 分別啟用 和 禁用 指定的按鈕 , 其它情況下可以使用兩個(gè)按鈕if(self.index == 1){self.lastButton.enabled = NO;self.nextButton.enabled = YES;}else if(self.index == self.pics.count){self.lastButton.enabled = YES;self.nextButton.enabled = NO;}else{self.lastButton.enabled = YES;self.nextButton.enabled = YES;}// 2. 設(shè)置 UIImageView 和 UILabel 切換// ① 獲取對(duì)應(yīng)的數(shù)據(jù) 字典NSMutableDictionary * d = self.pics[self.index - 1];// ② 設(shè)置提示 UILabel 文字 , 拼接字符串 , 1/5self.indexLabel.text = [NSString stringWithFormat:@"%d/%lu", self.index, self.pics.count];// ③ 設(shè)置 圖片 顯示self.Image.image = [UIImage imageNamed:d[@"pic"]];// ④ 設(shè)置 文字 描述self.imageDescription.text = d[@"des"];}@end( 3 ) 效果展示
效果展示 :
四. Storyboard 添加 配置 及 相關(guān)知識(shí)點(diǎn)
1. 添加 新界面 ( ① 新建 Storyboard | ② 配置 Storyboard | ③ 新建ViewController 代碼 )
( 1 ) 添加 Storyboard ( ① File -> New -> File | ② iOS -> User Interface -> Storyboard | ③ General -> Deployment -> Main Interface 配置 Storyboard )
Main.storyboard 添加流程 :
- 1.新建 : 菜單欄 File -> New -> File 選項(xiàng) , 彈出 新建 對(duì)話框 ;
- 2.選擇文件模板 : 在彈出的 對(duì)話框中 選擇 iOS -> User Interface -> Storyboard 文件 , 點(diǎn)擊 Next 按鈕 , 進(jìn)行下一步設(shè)置 ;
- 3.選擇文件路徑 : 最好將文件放在 主代碼 路徑下 , 點(diǎn)擊 Create 進(jìn)行下一步 ;
- 4.Xcode 設(shè)置 : 其 文件 創(chuàng)建在了 代碼目錄下 , Xcode 中的引用 放在了根目錄 , 此時(shí) 將其拖動(dòng)到 代碼路徑中即可 ;
設(shè)置完畢后的情況 :
- 5.設(shè)置啟動(dòng) UI 文件 : 選中 Xcode 項(xiàng)目 根路徑文件 , 在 General -> Deployment -> Main Interface 一欄 選擇 想要啟動(dòng)的 UI 文件 ;
( 2 ) Storyboard 設(shè)置 ( ① 拖動(dòng)箭頭設(shè)置啟動(dòng)界面 | ② View Controller 的 Is Initial View Controller 勾選框 設(shè)置啟動(dòng)界面 | ③ 關(guān)聯(lián) ViewController 代碼 )
Storyboard 設(shè)置 :
- 1.設(shè)置多個(gè) View Controller : 在 Main.storyboard 中 , 可以直接將 View Controller 拖入其中 ; 注意 為 每個(gè) ViewController 設(shè)置 4.7inch 大小 ;
- 2.設(shè)置 3 個(gè) View Controller : 拖入 三個(gè) ViewController , 并為其 根 View 設(shè)置 不同的背景顏色 ;
- 3.拖動(dòng)箭頭 : 直接拖動(dòng) 向右的 箭頭 , 其指向就是第一個(gè) 啟動(dòng)的界面 ;
- 4.屬性設(shè)置啟動(dòng)界面 : 選中 ViewController , 在屬性查看器中 設(shè)置 View Controller 模塊下的 Is Initial View Controller 選項(xiàng) ;
- 5.關(guān)聯(lián) ViewController 代碼 : 在 Main.Storyboard 中 雖然添加了 2 個(gè) 界面 , 但是沒(méi)有與之對(duì)應(yīng)的 ViewController.m 的代碼 , 這里需要在 身份查看器 中 設(shè)置 Class 屬性 ;
( 3 ) 新建 ViewController.m 文件 ( ① File -> New -> File | ② iOS -> Source -> Cocoa Touch Class | ③ Storyboard 中 身份查看器 配置 Class )
新建 ViewController.m 文件 :
- 1.新建文件 : 菜單欄 File -> New -> File 選項(xiàng) , 彈出 新建對(duì)話框 ;
- 2.創(chuàng)建類型選擇 : 在彈出的 對(duì)話框中 選擇 iOS -> Source -> Cocoa Touch Class 文件 , 點(diǎn)擊 Next 按鈕 , 進(jìn)行下一步設(shè)置 ;
- 3.設(shè)置類 : 選擇 父類 類型為 UIViewController , 類名不要與其它 文件 重名 , 點(diǎn)擊 Next 進(jìn)行下一步設(shè)置 ;
- 4.設(shè)置文件路徑 : 在 彈出 的 對(duì)話框中 設(shè)置代碼的路徑 , 這里直接使用默認(rèn)值即可 ; 點(diǎn)擊 Create 按鈕 , 即可生成 對(duì)應(yīng)的 ViewController 代碼 文件 ;
- 5.Storyboard 代碼對(duì)應(yīng)設(shè)置 : 點(diǎn)擊 Storyboard 中的 ViewController , 在 身份查看器 中配置 Class 選項(xiàng) , 直接輸入 剛才生成的 TestViewController 名稱即可完成對(duì)應(yīng)關(guān)系 ;
2. Storyboard 相關(guān)知識(shí)點(diǎn) ( ① 刪除 Storyboard | ② Storyboard 本質(zhì) )
( 1 ) 刪除 Storyboard ( ① 刪除文件及引用 | ② 刪除引用 文件保留 )
刪除 Storyboard : 選中 Storyboard 點(diǎn)擊 Delete 鍵 , 就會(huì)彈出如下對(duì)話框 , 提供了 三個(gè)選項(xiàng) ;
- 1.Move to Trash : 刪除 Finder 中的 文件 , 及 Xcode 中的索引 , 該文件直接刪除到 Trash 廢紙簍 中 ;
- 2.Remove Reference : 刪除 Xcode 中的 引用 , 但是 文件 還是 在 該項(xiàng)目 下 , 可以隨時(shí) 通過(guò) 拖動(dòng) 恢復(fù)該文件 ;
- 3.Cancel : 取消刪除操作 ;
( 2 ) Storyboard 本質(zhì) ( XML 文本文件 )
Storyboard 本質(zhì) : 向 首界面 拖入 一個(gè) UILabel , 并查看 該文件 ;
- 1.使用文本編輯器查看 : 使用 Subline 文本編輯器查看 Storyboard 界面 , 發(fā)現(xiàn) 其本質(zhì) 是一個(gè) 純文本 的 文件 ; 該方式 與 Android 的 布局文件相似 ;
- 2.xml 文本 : 該 文本 本質(zhì) 是 一個(gè) xml 文件 ;
- 3.Xcode 中使用文本打開(kāi) : 右鍵點(diǎn)擊 Storyboard 文件 , 選擇 Open As -> Source Code 即可 查看 源碼 ;
- 4.查看 代碼 樣式 :
- 5.UILabel 代碼 分析 : 其中 text 屬性 就是 顯示 文字 , rect frame 子標(biāo)簽 就是其 位置 和 寬高 ;
3. iOS 應(yīng)用啟動(dòng)步驟簡(jiǎn)介
( 1 ) iOS 應(yīng)用啟動(dòng)步驟
iOS 應(yīng)用啟動(dòng)步驟 :
- 1.程序入口 main 函數(shù) : main () 函數(shù) 在 Xcode 中 代碼 路徑 下的 Supporting Files 目錄下 的 main.m 文件中 ;
- 2.調(diào)用 UIApplicationMain 方法 : 調(diào)用 UIApplicationMain 方法 , 啟動(dòng)應(yīng)用 ;
- 3.查找 Storyboard : 查找 在 應(yīng)用設(shè)置中 的 Main Interface 設(shè)置的 Storyboard 文件 , 該文件是 應(yīng)用啟動(dòng) 加載 的 UI 界面 ;
- 4.查找 啟動(dòng)界面 : 查找 在 Storyboard 中 箭頭指向 的 啟動(dòng) ViewController ;
- 5.加載 UI 界面 : 讀取 Storyboard 文件 , 加載并分析 其 XML 標(biāo)簽 屬性 和 值 對(duì)應(yīng)的 控件 , 創(chuàng)建這些控件 并 添加到 ViewController 中 ;
- 6.調(diào)用 viewDidLoad 方法 : 界面 加載 完畢后 , 調(diào)用 ViewController.m 中的 viewDidLoad 方法 ;
- 7.界面 展示 : 將創(chuàng)建的 UI 界面 在手機(jī)屏幕上 展示 給用戶 ;
五. Bundle 簡(jiǎn)介
( 1 ) Bundle 簡(jiǎn)介
Bundle 簡(jiǎn)介 : 應(yīng)用程序名稱.app 是 Bundle , 是一個(gè) 目錄 ;
- 1.Mac 中的 Bundle : 在 Mac 中的 Finder 中 , 點(diǎn)擊 應(yīng)用程序 目錄 , 其中是一個(gè)個(gè) “.app” 后綴 的 文件 , 這些文件 就是 Bundle , 可以右鍵點(diǎn)擊 選擇 顯示包內(nèi)容 , 查看其中的 目錄 內(nèi)容 ;
- 2.顯示包內(nèi)容 : 右鍵點(diǎn)擊 app 后綴 文件 , 選擇 顯示包內(nèi)容 選項(xiàng) , 即可查看其內(nèi)容 , 其 Contents 下的 內(nèi)容 就是 Bundle ;
- 3.iOS 中的 Bundle : 與 Mac 基本相同 , iOS 應(yīng)用程序 , 打包好以后 , 也是一個(gè) .app 后綴的 文件 , 也可以通過(guò) 右鍵 點(diǎn)擊 該文件 , 選擇 顯示包內(nèi)容 查看 Bundle ;
- 4.Bundle 路徑 : 在應(yīng)用中 , 可以通過(guò) NSLog(NSHomeDirectory()); 打印出 沙盒路徑 , 在 該路徑 向后 退 兩層 目錄 , 可以看到 Bundle 目錄 , Bundle 文件都在該 目錄中 ;
Bundle 路徑 :
- 5.iOS 中的 .app 文件路徑 : 在 Bundle 目錄下 , Application 路徑 下 的 二級(jí) 文件 就是 iOS 中的 app 后綴文件 , 右鍵 可查看其 內(nèi)容 ;
- 6.查看 Bundle 內(nèi)容 : 右鍵點(diǎn)擊 “5.NSBundleDemo.app” 文件 , 選擇 顯示包內(nèi)容 選項(xiàng) , 可以查看 Bundle 內(nèi)容 , 如下圖 ;
- 7.創(chuàng)建文件 : 創(chuàng)建 1 個(gè) 新的 Storyboard 文件 , 然后 再次查看 Bundle , 即可看到 在 Bundle 中 出現(xiàn)了一個(gè) 新文件 ; 這個(gè) 文件 是 加密的 , 無(wú)法查看 ;
( 2 ) 圖片放置 位置 ( ① 放在 Assets.xcassets [推薦] | ② 放在根目錄[不推薦] )
圖片放置 位置 : 準(zhǔn)備兩張圖片 , 分別放在 代碼 根目錄 和 Assets.xcassets 中 ;
- 1.放在 根目錄 : 在 Bundle 中 也可以 看到 該圖片 , 不安全 ;
- 2.放在 Assets.xcassets 目錄中 : 放在 該 目錄下 , 打包后 放在 Assets.car 中 , 放在根目錄的圖片 直接顯示在 Bundle 中 ;
( 3 ) NSBundle 使用 ( ① 獲取 NSBundle 對(duì)象 | ② 獲取 Bundle 目錄下 某文件的 全路徑 )
NSBundle 使用 :
- 1.NSBundle 類 作用 : 獲取了 NSBundle 類 , 就相當(dāng)于獲取了 Bundle 目錄中的內(nèi)容 ; 如 下圖 的內(nèi)容 ;
- 2.獲取 NSBundle 對(duì)象 : 通過(guò) 調(diào)用 NSBundle 的 mainBundle 方法 , 獲取該對(duì)象 ;
- 3.獲取 Bundle 下的 文件路徑 : 可以通過(guò) pathForResource 方法 獲取 某文件的 路徑 , ① 傳入 文件名 和 后綴 兩個(gè)參數(shù) , ② 或者 傳入 文件名.后綴 參數(shù) ;
- 4.輸出結(jié)果 :
六. Property List 簡(jiǎn)介
( 1 ) Property List 創(chuàng)建 ( ① New File | ② iOS -> Resource -> Property List | ③ 數(shù)據(jù)設(shè)置 | ④ 類型設(shè)置 )
PList 創(chuàng)建 :
- 1.創(chuàng)建文件 : 右鍵 點(diǎn)擊 代碼目錄 , 選擇 New File 選項(xiàng) ;
- 2.設(shè)置文件類型 : 選擇 iOS -> Resource -> Property List 文件 ;
- 3.設(shè)置文件路徑 : 設(shè)置 文件 名稱 , 并 選擇 文件路徑 ;
- 4.添加數(shù)據(jù) : 點(diǎn)擊 PList 中的 加號(hào) 按鈕 , 即可添加數(shù)據(jù) ;
- 5.數(shù)據(jù)類型設(shè)置 : 默認(rèn) 的 根元素 是 Dictionary 字典 , 這里暫時(shí)只討論 字典 的 情況 ;
( 2 ) 獲取 Property List 數(shù)據(jù) ( ① 獲取 Bundle PList 路徑 | ② dictionaryWithContentsOfFile 初始化字典 | ③ 查看數(shù)據(jù) )
獲取 PList 數(shù)據(jù) :
- 1.查看 Bundle 中 PList 文件 : 之前 創(chuàng)建 了一個(gè) PList 文件 , 這里進(jìn)入 Bundle 目錄中 查看 , 根據(jù)之前 打印的 Bundle 路徑 , 查看 其 文件內(nèi)容 :
- 2.獲取 Bundle 目錄中 的 PList 文件 路徑 : 調(diào)用 NSBundle 對(duì)象的 pathForResource 方法 , 獲取 PList 在 Bundle 中的 全路徑 ;
- 3.根據(jù)文件路徑 初始化 字典 : 調(diào)用 NSDictionary 的 dictionaryWithContentsOfFile 方法 , 初始化字典 , 傳入的是 PList 路徑 ;
- 4.調(diào)試查看字典內(nèi)容 : 在 字典 初始化 位置 打斷點(diǎn) , 查看初始化的內(nèi)容 ;
( 3 ) Property List 多種類型 數(shù)據(jù) 設(shè)置 獲取 ( ① 設(shè)置 Root 類型為 NSArray | ② 設(shè)置 多類型 數(shù)據(jù) | ③ 獲取 PList 的 Bundle 路徑 | ④ 初始化 數(shù)組 | ⑤ 打斷點(diǎn)查看數(shù)據(jù) )
PList 多種類型數(shù)據(jù)設(shè)置 : 上面 講解 了 根元素 為 字典 的情況 , 這里討論 根元素 為 數(shù)組 的情況 , 其中 數(shù)組的 每個(gè)元素 都可以設(shè)置 不同的類型 ;
- 1.設(shè)置根元素類型為數(shù)組 :
- 2.設(shè)置多個(gè)類型的數(shù)據(jù) : 每個(gè) 數(shù)組 元素 可以設(shè)置 不同的 類型 , 這里設(shè)置 字典 , 數(shù)字 , 布爾 值 三個(gè) 數(shù)組元素 ;
- 3.獲取 PList 的 Bundle 路徑 : 調(diào)用 NSBundle 對(duì)象的 pathForResource 方法 獲取 對(duì)應(yīng)文件的 Bundle 全路徑 ;
- 4.初始化 數(shù)組 : 調(diào)用 NSArray 的 arrayWithContentsOfFile 方法 初始化 數(shù)組 , 傳入 PList 的路徑 , 注意 這個(gè) PList 的 Root 類型 必須是 Array 類型 的 ;
- 5.打斷點(diǎn)查看 數(shù)組 內(nèi)容 :
七. 優(yōu)化 圖片 瀏覽器 ( ① 使用 PList | ② 懶加載 )
( 1 ) 使用 PList 存儲(chǔ) 數(shù)據(jù) ( ① 創(chuàng)建 PList 文件 | ② 數(shù)據(jù)準(zhǔn)備 | ③ 獲取 Bundle 路徑 | ④ 獲取 PList 的 Bundle 路徑 | ⑤ PList -> 數(shù)組 )
使用 PList 存儲(chǔ)數(shù)據(jù) :
- 1.創(chuàng)建 PList 文件 : 創(chuàng)建 名稱為 car.plist 的文件 , 將其 Root 類型設(shè)置為 Array 類型 ;
- 2.數(shù)據(jù)準(zhǔn)備 : 將 圖片名稱 和 描述 信息 存入 plist 文件中 ;
- 3.獲取 Bundle 路徑 :
- 4.獲取 PList Bundle 路徑 :
- 5.初始化數(shù)組 :
( 2 ) 懶加載 優(yōu)化 ( ① 在 get 方法中加載數(shù)據(jù) | ② 如果為 空 才 加載 )
懶加載優(yōu)化 :
- 1.懶加載原則 : ① 用到 某 屬性的時(shí)候才去 加載 ; ② 沒(méi)有值 時(shí) 才 進(jìn)行初始化 ;
- 2.點(diǎn)語(yǔ)法說(shuō)明 : 以 @property (strong, nonatomic) NSArray * pics; 為例 , self.pics 相當(dāng)于 get 方法 , 即調(diào)用了 -(NSArray *) pics;方法 ; set 方法調(diào)用的是 -(void)setPics:(NSArray*)pics; ; 其實(shí)際的 變量名稱 是 _pics ; 根據(jù) 用到 屬性時(shí) 才去加載 原則 , 這里將加載過(guò)程放在 get 方法中 ;
- 3.讀取 plist 頻率 : 一般情況下 程序 運(yùn)行起來(lái) , plist 是不會(huì)改變的 , 因此 只需要加載一次即可 ; 根據(jù) 沒(méi)有值 的時(shí)候才去 初始化 原則 , 只有當(dāng)屬性為 空時(shí) , 才執(zhí)行初始化操作 ;
- 4.代碼 :
八. UIImageView 播放動(dòng)畫(huà) 及 內(nèi)存優(yōu)化
1. 動(dòng)畫(huà) 播放
( 1 ) UIImageView 動(dòng)畫(huà) 相關(guān)屬性 ( ① 圖片數(shù)組 | ② 動(dòng)畫(huà)時(shí)長(zhǎng) | ③ 重復(fù)次數(shù) )
UIImageView 動(dòng)畫(huà)相關(guān)屬性 :
- 1.動(dòng)畫(huà)圖片數(shù)組 : 多個(gè) NSArray 數(shù)組 , 其中元素類型是 UIImage ;
- 2.動(dòng)畫(huà)持續(xù)時(shí)間 : 單位 秒 ;
- 3.動(dòng)畫(huà)重復(fù)次數(shù) : 無(wú)限循環(huán) 設(shè)置 0 ;
( 2 ) UIImageView 動(dòng)畫(huà) 相關(guān)方法 ( ① 開(kāi)始播放 | ② 停止播放 | ③ 是否正在播放 )
UIImageView 動(dòng)畫(huà)相關(guān)方法 :
- 1.開(kāi)始播放 :
- 2.停止播放 :
- 3.是否正在播放 :
( 3 ) UIImageView 動(dòng)畫(huà) 執(zhí)行流程 ( ① 準(zhǔn)備 UIImage 數(shù)組 | ② 設(shè)置動(dòng)畫(huà)參數(shù) UIImage數(shù)組 時(shí)長(zhǎng) 重復(fù)次數(shù) | ③ 啟動(dòng)動(dòng)畫(huà) )
UIImageView 動(dòng)畫(huà) 執(zhí)行流程 :
- 1.首先判斷 動(dòng)畫(huà) 是否在執(zhí)行 : 動(dòng)畫(huà)執(zhí)行 操作 會(huì)覆蓋 上一次的 動(dòng)畫(huà) , 每次 調(diào)用 startAnimating 都會(huì) 重新開(kāi)始 執(zhí)行動(dòng)畫(huà) , 因此 當(dāng)動(dòng)畫(huà)正在 執(zhí)行時(shí) , 不要覆蓋 ; 使用 isAnimating 方法 先判斷 動(dòng)畫(huà)是否在習(xí)性 ;
- 2.準(zhǔn)備數(shù)據(jù) : 準(zhǔn)備 UIImage 數(shù)組 ;
- 3.設(shè)置圖片 : 將準(zhǔn)備好的 UiImage 數(shù)組 設(shè)置 到 animationImages 屬性中 ;
- 4.設(shè)置動(dòng)畫(huà)參數(shù) : 設(shè)置動(dòng)畫(huà)的 時(shí)長(zhǎng) ( animationDuration 屬性 ) 和 重復(fù)次數(shù) ( animationRepeatCount 屬性 ) ;
- 5.開(kāi)始執(zhí)行動(dòng)畫(huà) : 執(zhí)行 startAnimating 方法 , 開(kāi)始執(zhí)行動(dòng)畫(huà) ;
- 6.完整代碼 :
2. 圖片內(nèi)存 優(yōu)化
( 1 ) UIImageView 動(dòng)畫(huà) 內(nèi)存 查看 ( ① Debug Navigator 查看內(nèi)存 | ② 查看 動(dòng)畫(huà)播放前后的內(nèi)存變化 | ③ 分析內(nèi)存不釋放的原因 )
UIImageView 內(nèi)存查看 :
- 1.查看內(nèi)存方式 : 內(nèi)存 可以在 Debug Navigator 中 進(jìn)行查看 , 前提是 應(yīng)用 必須處于正在運(yùn)行的狀態(tài) ;
- 2.運(yùn)行并查看內(nèi)存 : 播放之前 內(nèi)存 是 19.9M ;
- 3.點(diǎn)擊播放動(dòng)畫(huà)查看內(nèi)存 : 點(diǎn)擊播放按鈕 , 及 播放 完畢之后 , 內(nèi)存一直保持在 36.9M ;
- 4.分析原因 : 這是 由于 圖片 一直 駐留在內(nèi)存中 沒(méi)有釋放 , 使用 UIImage imageNamed 方法 加載的圖片 , 不會(huì)釋放 ;
( 2 ) UIImage 內(nèi)存分析 ( ① 使用 UIImage imageNamed:圖片名稱 加載圖片 | ② 使用 UIImage imageWithContentsOfFile:Bundle路徑名 加載圖片 )
UIImage 內(nèi)存分析 :
- 1.使用 UIImage imageNamed:圖片名稱 加載圖片 : 使用該方式 加載 圖片 , 圖片會(huì)在 內(nèi)存中 駐留 , 只有需要長(zhǎng)期保持的 圖片 , 如 UI 界面的 經(jīng)常顯示 的 各種背景 圖標(biāo) 等 , 使用該方式加載 ;
- 2.使用 UIImage imageWithContentsOfFile:Bundle路徑名 加載圖片 : 使用該方式加載圖片時(shí) , 如果圖片沒(méi)有被引用時(shí) , 圖片占用的內(nèi)存就會(huì)被釋放 ; 即 將圖片持有變量設(shè)置為 nil 即可 ;
( 3 ) 內(nèi)存優(yōu)化 的 動(dòng)畫(huà) 執(zhí)行 完整流程 ( ① 準(zhǔn)備 UIImage 數(shù)組 | ② 設(shè)置動(dòng)畫(huà)參數(shù) UIImage數(shù)組 時(shí)長(zhǎng) 重復(fù)次數(shù) | ③ 啟動(dòng)動(dòng)畫(huà) | ④ 異步設(shè)置圖片數(shù)組為 nil )
內(nèi)存優(yōu)化后的 動(dòng)畫(huà) 執(zhí)行流程 :
- 1.首先判斷 動(dòng)畫(huà) 是否在執(zhí)行 : 動(dòng)畫(huà)執(zhí)行 操作 會(huì)覆蓋 上一次的 動(dòng)畫(huà) , 每次 調(diào)用 startAnimating 都會(huì) 重新開(kāi)始 執(zhí)行動(dòng)畫(huà) , 因此 當(dāng)動(dòng)畫(huà)正在 執(zhí)行時(shí) , 不要覆蓋 ; 使用 isAnimating 方法 先判斷 動(dòng)畫(huà)是否在習(xí)性 ;
- 2.準(zhǔn)備數(shù)據(jù) : 準(zhǔn)備 UIImage 數(shù)組 ; 這里需要從 Bundle 中獲取圖片 , 因此需要將圖片 放置在 Xcode 中的 Assets.xcassets 之外 ( Bundle 中無(wú)法獲取其中的資源路徑 ) , 拖入一個(gè)圖片文件夾 , 這里要注意 在 “Choose options for adding these files” 對(duì)話框中 選擇 Create groups 選項(xiàng) , 否則 就無(wú)法獲取到 Bundle 中的 文件路徑 ;
- 3.設(shè)置圖片 : 將準(zhǔn)備好的 UiImage 數(shù)組 設(shè)置 到 animationImages 屬性中 ;
- 4.設(shè)置動(dòng)畫(huà)參數(shù) : 設(shè)置動(dòng)畫(huà)的 時(shí)長(zhǎng) ( animationDuration 屬性 ) 和 重復(fù)次數(shù) ( animationRepeatCount 屬性 ) ;
- 5.開(kāi)始執(zhí)行動(dòng)畫(huà) : 執(zhí)行 startAnimating 方法 , 開(kāi)始執(zhí)行動(dòng)畫(huà) ;
- 6.清除動(dòng)畫(huà)圖片方法 : 直接將 UIImageView 的 animationImages 動(dòng)畫(huà)圖片數(shù)組 設(shè)置為 nil 即可 ;
- 7.異步執(zhí)行方法 : 需要 在動(dòng)畫(huà)開(kāi)始 1 秒之后執(zhí)行 , 代碼實(shí)現(xiàn)如下 :
- 8.完整代碼 :
( 4 ) NSBundle pathForResource 為 nil 解決方案 ( ① 拖入目錄 選擇 Create gropus | ② 查看 Xcode 項(xiàng)目 配置 -> Build phases 的 Bundle 配置 )
NSBundle pathForResource 為 nil 解決方案 :
- 1.拖入目錄方法 : 在 將 pic 目錄 拖入 Xcode 中時(shí) , 需要選擇 Create groups 選項(xiàng) , 不能選擇 Create folder reference 選項(xiàng) ;
- 2.確認(rèn)是否可以獲取到 : 在 Xcode 項(xiàng)目設(shè)置中 , 如果有 要獲取的 具體的 圖片 文件設(shè)置 , 那么可以獲取到 , 如果只有 圖片的 目錄 pic , 沒(méi)有具體的 圖片 配置 , 那么圖片就獲取不到 ;
( 5 ) 效果展示
效果展示 :
博客相關(guān)資源 :
- 1.CSDN下載地址 : https://download.csdn.net/download/han1202012/10956883
總結(jié)
以上是生活随笔為你收集整理的【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Android 应用开发】UI绘制流程
- 下一篇: 【音频处理】Polyphone 样本编辑