iOS開發概述............................................................................................................................................................ 2
UI基礎控件............................................................................................................................................................... 2
1. UILabel——標籤.................................................................................................................................. 2
2. UIImageView——圖像視圖............................................................................................................... 2
3. UIButton——按鈕................................................................................................................................ 3
4. UITextField——文本框控件.............................................................................................................. 3
5. UISwitch——開關控件....................................................................................................................... 4
6. UISlider——滑塊控件......................................................................................................................... 4
7. UIStepper——計數器控件.................................................................................................................. 5
8. UISegmentControl——選項卡控件.................................................................................................. 5
9. UIView.................................................................................................................................................... 5
Foundation框架...................................................................................................................................................... 6
1. NSString和NSMutableString............................................................................................................. 7
2. NSNumber.............................................................................................................................................. 7
3. NSDate.................................................................................................................................................... 7
4. NSArray和NSMutableArray.............................................................................................................. 7
5. NSDictionary和NSMutableDictionary........................................................................................... 7
MVC體系結構.......................................................................................................................................................... 8
Model:數據模型........................................................................................................................................... 8
View:視圖...................................................................................................................................................... 8
Controller:控制器........................................................................................................................................ 8
代理協議消息傳遞機制.......................................................................................................................................... 8
NSTimer計時器....................................................................................................................................................... 8
聲音和音效的播放.................................................................................................................................................. 9
聲音................................................................................................................................................................... 9
音效................................................................................................................................................................... 9
UIKIT基礎控件小結
iOS開發概述
-
cocos體系結構,一共有四層框架,要調用不同的功能,需要使用不同的框架。前期主要學習cocos touch層的UIKit框架
-
iOS和android的對比
-
iOS是基於UINX,用C語言開發的,直接與系統底層交互,性能高
-
andorid是基於Linux,用Java語言開發,基於虛擬機運行,性能差
UI基礎控件
1. UILabel——標籤
作用:顯示文字
屬性:
text屬性:是label的文字
alignment屬性:對齊方式
lines屬性:如果爲0,不限制行數,但是Label需要有足夠大的空間顯示內容
Action:無
2. UIImageView——圖像視圖
作用:在一個區域內,顯示圖像。
注意:UIImage是一個二進制的圖像數據,而UIImageView是用來顯示圖像數據的區域
屬性:
image屬性:用於設置在圖像視圖中顯示的圖片
要從bundle加載圖像,可以使用[UIImage imageNamed:]方法。
UIImageView本身可以做序列幀動畫,要使用序列幀動畫,我們需要指定三個屬性:
-
animationsImages:序列幀圖像數組
-
animationDuration:一組序列幀圖片播放完成需要的時間
-
animationRepeatCount:序列幀動畫重複的次數,默認爲0,循環播放
設置完UIImageView的動畫屬性之後,需要使用startAnimation方法啓動動畫,如果要停止動畫,可以使用stopAnimation方法。
另外,可以使用isAnimating屬性,判斷當前是否正在播放動畫
Action:無
3. UIButton——按鈕
作用:用戶交互的主要控件,有六種類型,其中自定義類型使用最爲普遍
屬性:
title屬性:是按鈕的文字
titleColor屬性:是按鈕的顏色
image屬性:是按鈕顯示的圖像
提示:如果同時指定了image和title屬性,當按鈕空間不夠時,image優先顯示;另外,image屬性在按鈕中不會變形
backgroundImage屬性:是按鈕的背景圖片,注意,按鈕的背景圖片會根據按鈕的實際大小拉伸,在使用背景圖片時,尤其需要注意按鈕的大小
backgroundColor屬性:按鈕的背景顏色屬性,僅在自定義類型的按鈕有效
使用技巧:通常在指定同一類型的按鈕操作時,我們習慣用tag區分按鈕,然後統一調用同一個方法
注意:設置按鈕屬性的同時,需要指定屬性應用的狀態,通常使用Normal狀態,Highlight是按鈕長按下的狀態
Action:TouchUpInside
4. UITextField——文本框控件
作用:供用戶輸入或編輯文本
屬性:
text屬性:獲得或設置文本框中的文字
使用文本框控件時需要注意幾項事情:
-
在輸入不同類型的文本時,需要注意鍵盤的類型,譬如輸入QQ號要使用數字鍵盤。輸入身份證號,需要自定義數字鍵盤或者默認打開數字的全鍵盤
-
使用自定義數字鍵盤時,如果在越獄的機器上,可能會出現格式顯示問題
-
如果界面上有多個文本框供用戶輸入時,要注意回車鍵的設置,實現文本框由上至下的切換,切換到最後一個文本框,再按回車鍵時,調用對應的確認按鈕的方法
-
需要注意關閉鍵盤,關閉鍵盤有兩種方法:
-
[self.view endEditing:YES];
-
[textField resignFirstResponder];
撤銷自身第一響應者的身份
要獲取鍵盤輸入的焦點,可以設置textField的becomeFirstResponder屬性,讓文本框成爲第一響應者即可。
-
要監聽文本框的回車事件,需要設置文本框的delegate,同時讓視圖控制器遵從<UITextFieldDelegate>協議
以上四個控件主要應用在應用程序中。
5. UISwitch——開關控件
作用:設置某一個屬性開或者關的狀態
屬性:
state屬性:on/off
使用isOn可以判斷開關當前是否打開
Action:valueChanged
6. UISlider——滑塊控件
作用:允許用戶使用手指拖動滑塊,產生數值變化的控件
屬性:
minimumValue:滑塊的最小數值
maximumValue:滑塊的最大數值
value:滑塊的當前數值
需要注意的時:滑塊沒有步長,滑塊數值通常是連續變化的,這樣可以保證滑塊動畫的連續性,因此,我們在使用滑塊時,需要格外留意是否有重複刷新的情況,例如照片查看器示例程序
Action: valueChanged
7. UIStepper——計數器控件
作用:用戶點擊“+”數值增加,點擊“-”數值減少
屬性:
minimumValue:滑塊的最小數值
maximumValue:滑塊的最大數值
value:滑塊的當前數值
stepValue:滑塊數值變化的步長
wraps:是否環繞,設置了環繞屬性之後,當數值到達最大值時會回覆到最小值,產生環繞效果。如果沒有設置環繞屬性,當到達最大值時,“+”會變灰禁止用戶點擊,當到達最小值時,“-”會變灰禁止用戶點擊
Action: valueChanged
8. UISegmentControl——選項卡控件
作用:用戶同一時間只能選擇一個選項,與開關不同,它可以設置多個選項供用戶選擇
屬性:
selectedSegmentIndex屬性:用戶當前選中的選項卡索引,第一個選項卡索引對應的數值是0
Action: valueChanged
以上四個控件主要應用在設置頁面。
作用:
-
是一個容器,可以容納任何的控件或者視圖
-
所有的控件,最終均繼承自UIView
屬性:
-
繼承類屬性:
superView:每一個UIView最多隻能有一個父視圖,注意:UIViewController的根視圖沒有父視圖。
subViews:當前視圖所包含的子視圖/控件
-
位置大小類屬性
frame:設置視圖的邊框
bounds:設置視圖的邊界,用於指定視圖的大小,常用於視圖的子控件設置位置,因爲bounds屬性的原點,永遠是(0,0)
center:設置視圖的中心點位置,通常用於指定視圖的位置,在視圖動畫中比較常用
注意:
frame和center可以指定UIView的位置
frame和bounds可以指定UIView的大小
-
形變屬性
transform:可以指定視圖的平移、旋轉和縮放屬性
-
CGAffineTransformRotate、CGAffineTransformScale、CGAffineTransformTranslation三個函數用於基於UIView當前的形變屬性繼續變形
-
CGAffineTransformMakeRotate、CGAffineTransformMakeScale、CGAffineTransformMakeTranslation三個函數用於基於UIView初始的形變進行變形
動畫:
UIView封裝了三個塊代碼動畫:
-
[UIView animateWithDuration:animations:]
-
[UIView animateWithDuration:animations:completion:]
-
[UIView animateWithDuration:delay: options: animations: completion:]
凡是帶有Mutable字樣的類型,都是可變的,如果存在相對應的沒有Mutable字樣的類型,都是不可變的,一旦初始化之後,就不可以再修改。
1. NSString和NSMutableString
-
字符串轉數字integerValue
-
字符串常用方法:[NSString stringWithFormat:@”格式字符串”, 參數…]
-
如果要表示:0001之類的數字格式可以使用”%04d”之類的格式字符串
-
-
是數字的NS對象的表達形式,如果要把數字添加到數組或者字典中,必須要進行轉換,同時要使用數組中的數字,還需要轉換成對應的數字。
-
要轉換數字可以使用OC提供的包裝方法:@(int)
-
要把NSNumber轉換成字符串,需要使用stringValue方法
-
-
是日期的數據類型
-
常用類方法[NSDate date]取出當前的系統時間
-
timeIntervalSinceDate方法可以計算兩個時間的差值,以秒爲單位
-
特別需要注意,不要把NSDate和NSData搞混,這對於初學者,是經常犯的錯誤。
-
4. NSArray和NSMutableArray
-
NSArray是不可變的,NSMutableArray是可變的,通常在使用時,可以用一個自定義方法,初始化一個NSMutableArray,而在方法之外,統一使用NSArray
-
在NSArray中,可以插入任何類型的對象,使用方法是:addObject(id)
-
要取出NSArray中的對象,可以使用整數下標獲取,例如:array[i]
-
需要注意的是:如果要將int、float、double、NSInteger、CGFloat、CGPoint、CGRect、CGSize這些類型的數據插入數組之前,都需要進行類型轉換
-
如果從Bundle中讀取數組,可以使用arrayWithContentOfFile:方法
-
5. NSDictionary和NSMutableDictionary
-
字典和NSArray非常類似,不過字典是使用字符串鍵值進行維護的,它的可讀性更強
-
在數據字典中,字符串的鍵值不能夠重複
-
要向數據字典中添加對象,需要使用setValue:forKey:方法
-
要從數據字典中獲取對象,需要使用dict[@”keyName”];
-
如果要從Bundle中讀取字典,可以使用dictionaryWithContentsOfFile:方法
-
MVC體系結構
Model:數據模型
負責數據的保存以及相關的處理方法,Model不知道它會被誰調用,也不知道什麼時候會被調用
View:視圖
負責界面上元素的顯示,通常在很多iOS應用程序中,視圖只是StoryBoard或者xib文件,一般不會在視圖中寫太多的代碼
Controller:控制器
負責界面上數據的顯示,以及用戶與界面發生交互之後,通知數據模型,做相應的處理。控制器是視圖與數據模型之間的紐帶和橋樑。通常在大多數應用程序中,視圖控制器中的代碼是最多的。
在iOS開發中,每一個Controller都有切僅有一個跟視圖,如果使用Storyboard建立的應用程序,Xcode會自動設置一個view作爲視圖控制器的跟視圖,也是第一個顯示在用戶面前的視圖。
代理協議機制在iOS開發中,是非常常用的一種消息傳遞機制,主要用於子視圖向父視圖傳遞數據,代理協議是單向消息傳遞。
要使用代理協議,需要以下幾個步驟:
-
子視圖控制器中需要做如下操作:
-
在子視圖控制器中定義協議,並且定義若干協議方法,注意:只有方法,而沒有方法的具體實現。協議的名稱通常是子視圖控制器的類名+Delegate
-
在子視圖控制器中定義代理屬性,代理的屬性是weak
-
子視圖控制器中,在需要時直接通過_delegate調用協議方法,就可以執行父視圖控制器中的相應方法的實現
-
父視圖控制器中需要做如下操作:
-
遵從子視圖控制器頭文件中定義的協議
-
在推出子視圖控制器前,設置自己是子視圖控制器的代理,通常在prepareSegue方法中實現
-
實現子視圖控制器中的協議方法,等待子視圖控制器的調用
NSTimer計時器
使用實例代碼如下:
// 第一個參數:多長時間會觸發一次,以秒爲單位
// 第二個參數:如果看到函數的參數有target,一般情況下,都用self
// 第三個參數:SEL,需要調用其他的方法,就是每次時鐘被觸發的時候,去執行的方法
// 最多可以帶一個參數,就是時鐘本身
// 第四個參數,暫時不用考慮,設置成nil
// 第五個參數:是否重複,通常會設置YES
_gameTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
在時鐘觸發方法中,可以使用sender.fireDate獲取到時鐘被觸發的時間
注意:使用NSTimer的時候,千萬不要忘記調用invalidate方法關閉時鐘。
NSTimer可能不會是及時相應觸發時間的,它的執行優先級相對較低,因此,不要使用NSTimer去做實時響應需求較高的週期性操作。
-
需要導入AVFoundation框架
-
需要從Bundle中加載文件,播放之前需要使用preparePlay方法,準備播放
-
可以設置聲音的循環次數、音量大小
-
播放效率相對略低,但是可以播放較大的聲音文件
-
導入AudioToolBox框架
-
使用C語言的函數直接將音頻加載到內存,通過SystemSoundID進行播放
-
在播放的時候,不容易中斷,也控制不了音量
-
播放效率高,通常使用不超過2秒的音頻文件
-
爲了避免同一個音效文件在不同視圖控制器中被重複加載,造成無謂的內存消耗,在使用音效時,通常會用一個數據字典進行維護