IOS開發學習筆記(六)
+攝像頭和照片庫+
由於ios應用受到沙盒機制的限制 ,通常不能獲取照片或自己沙盒之外的其他數據。但可使用圖像選擇器UIImagePickerController;並在其代理 UIImagePickerControllerDelegate中處理選擇的圖片和拍攝的照片;
沙盒(箱)機制:是一種數據安全策略;每個應用程序都有自己的存儲空間;應用程序不能翻過自己的空間去訪問別的存儲空間的內容;應用程序請求的數據都要通過許可權檢測,若不符合條件,不會被放行;
目錄包括:
Documents:用於存儲一些非常大的文件或需要非常頻繁更新的數據,能夠進行iTunes或iCloud備份;
獲取目錄位置:
NSArray *doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomain Mask,YES);//只有一個元素;
Library:包含Preferences和Caches兩個目錄;前者用於存放程序的設置數據,後者用於存放應用程序數據,用於緩存文件;
tem:臨時文件目錄;不能使用iTunes或iCloud備份;
使用NSString *temp=NSTemporaryDirectory();
+應用程序本地化+
可在應用包中為支持的語言創建一個子目錄,每種語言的子目錄都包含一個翻譯為此種語言的應用資源子集。每個子目錄都稱為一個本地化項目,也稱為本地化文件夾;
使用iso的國家代碼作為唯一標識;
本地代號:語言代號+國家(地區)代號;
有時國家代號可省略,如en-US.lproj是精確查找,若沒有打開再找en-lproj;
包括:
都須先在項目下的Locailzation添加語言支持;
+ 文本信息本地化:
- 系統按鈕和信息:在工程名—>Localizations下點擊+;
-應用名稱:添加一個StringFile,命名為InfoPlist.strings(必須);再添加應用名:CFBundleDisplayName="China";
-使用genstring可從源程序文件中掃描NSLocalizedString的宏並取出字元,輸出到本地文件中;
+ XIB和storyboard的本地化:會直接生成想著控制項的id名的strings文件;
+ 資源本地化:圖片和音頻等;直接選中圖片資源點擊Locailzation,選擇要放入的語言文件夾下,並使用圖片資源名都相同;
在訪問資源文件時,文件夾和組是有區別的:訪問文件夾中的資源需要將文件夾作為路徑;而組中的資源可直接使用文件名訪問;
Target(目標)與Project(工程)關係:一個target就是一個編譯後的產品;一個project包含多個Target;
Scheme(方案):在Xcode左上角的運行處,可進行編輯;指一個要編譯執行的target,包括了編譯這個Target的配置信息,以及運行target的測試方案。一信Xcode中包含多個方案,但一次只能活躍一個;
視圖分類:
控制項:繼承自UIController,能響應事件;
窗口:UIWindow,一個ios應用只有一個UIWindow對象,是所有子視圖的根容器;
容器視圖:UIScrollView,UIToolbar及其子類;
顯示視圖:
文本和web視圖:能顯示多行文本和html的視圖;UITextView和UIWebView;
導航視圖:UITabBar和UINavigationBar;
警告框和操作表:
** 鍵盤顯示的隱藏的監聽:會發出一個通知:UIKeyboardDidHideNotification和UIKeyboardDidShowNotification;
屏幕適配:在Iphone屏幕中狀態欄高20點,導航欄44點,標籤欄49點;(多用44點這個值)
Auto Layout布局:傳統布局只能設置視圖與屏幕的上下左右邊距,不能設置屏幕中視圖之間的距離;在iOS6後引入Auto Layout技術,以解決多屏幕問題;
使用約束(constraint)來定義視圖間的關係
【在Interface Builder中可使用約束;但在代碼構建界面時不推薦使用,而是自己根據屏幕大小動態計算界面的位置】
stack:將視圖對象添加到堆視圖中;
對齊:
Pin:創建距離和位置的想著約束;
堆視圖(Stack View):是一種容器視圖,可包含子視圖;專為界面布局而設計的;(可當android中的LinearLayout使用);
(在iPhone6/6 plus後Auto Layout已不能解決多屏幕適配的問題了;它只能解決界面差別小的問題,而界面差別很大時採用不同的用戶界面文件)
為應對新形式的變化,在iOS8後採用新的屏幕適配技術Size Class;它依賴並建立在Auto Layout技術之上;
通過.xcassets添加的圖片資源:
1x:表示普通顯示屏使用的圖片;
2x:表示iPhone4s、iPhone5/5s/5c使用的圖片;
3x:表示iPhone6/6s plus顯示使用的圖片;
模態視圖:有時需要放棄主要任務轉而去做其他次要任務,然後再返回到主任務,這個次要任務就是在模態視圖中完成的;默認情況下,模態視圖是屏幕下方滑出來的,完成時需要關閉這個模態視圖,若不關閉則無法招待後續操作;
-presentViewController:animated:completion: 呈現模態視圖;
-dismissViewControllerAnimated:completion: 關閉模態視圖;
單例:
@implementation ToolManager
static ToolManager *instance;
+(ToolManager *)getInstance{
static dispatch_once_t once;
dispatch_once(&once, ^{
instance = [[ToolManager alloc] init];
});
return instance;
}
@end
UIApplication:shareApplication:獲取一個實例;
打開默認系統應用
// NSURL *url = [NSURL URLWithString:@"百度一下,你就知道"];
// NSURL *url = [NSURL URLWithString:@"tel://18508293280"];
NSURL *url = [NSURL URLWithString:@"sms://18508293280"];
[[UIApplication sharedApplication]openURL:url options:nil completionHandler:^(BOOL success) {
if (success) {
NSLog(@"打開成功");
}else{
NSLog(@"打開失敗");
}
}];
[代理模式下的約定:在使用委託命名時,如若以UITextField發出的消息,則以textField開頭,後面跟三個動詞Should、Will、Did;Should應該返回一個BOOL類型;Did沒有返回值;Will也沒有返回值;都把發送消息的對象作為參數傳入]
推薦閱讀: