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