如何優雅地使用iOS系統相機、相冊

飛來科技  發布時間:2019-06-29 23:03:39

本文關鍵詞:ios調用相機和相冊

ios調用系統相機相冊_ios調用相機和相冊_ios 調用相冊

cameraphoto.png

iOS系統相機、相冊功能全部依托于圖像選取控制器UIImagePickerController,在使用該控制器時,我們需要按照如下步驟進行

ormlite專門封裝了一個dao類對中的數據進行操作,每操作一個數據表,則通過幫助類對象調用getdao()方法獲取相應的dao對象,類型需指定兩個泛型,第一個是相應的實體類,第二個是id的數據類型,例如dao dao = helper.getdao(person.class)。我們只需要給搜索表單加入一個:searchtype=*的屬性就可以實現搜索指定類型的內容,其中*代表某一類型的數據內容,0=全部,1=單篇,2=文章,3=產品,4=下載,5=招聘,6=相冊,7=鏈接,8=視頻。2、軟件可設置指定數目操作,指定屬性操作,也可以隨機件數和隨機屬性進行操作,支持混批模式。

觸發器是一種與表操作有關的對象,當觸發器所在表上出現指定事件時,將調用該對象,即表的操作事件觸發表上的觸發器的執行。我們常用的操作語言sql語句在執行的時候需要要先編譯,然后執行,而存儲過程(storedprocedure)是一組為了完成特定功能的sql語句集,經編譯后存儲在中,用戶通過指定存儲過程的名字并給定參數(如果該存儲過程帶有參數)來調用執行它。ormlite專門封裝了一個dao類對中的數據進行操作ios調用相機和相冊,每操作一個數據表,則通過幫助類對象調用getdao()方法獲取相應的dao對象,類型需指定兩個泛型,第一個是相應的實體類,第二個是id的數據類型,例如dao dao = helper.getdao(person.class)。

圖像選取控制器的資源類型是一個枚舉,擁有如下三種類型

UIImagePickerControllerSourceTypeCamera // 相機類型
UIImagePickerControllerSourceTypePhotoLibrary // 照片庫類型,相當于系統應用"照片"中的"相簿/Photos"欄加上"照片/Moments"欄
UIImagePickerControllerSourceTypeSavedPhotosAlbum // 照片類型,相當于系統應用"照片"中的"照片/Moments"欄

我們可以使用isSourceTypeAvailable方法進行檢查

// 以"檢查圖像選擇器的相機類型是否可用"為例
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
  // 相機類型可用
}
else
{
  // 相機類型不可用
}

ios調用系統相機相冊_ios調用相機和相冊_ios 調用相冊

這步操作用于檢查某種資源類型下是否支持某種媒體類型,比如iPhone是否可以拍LivePhoto

圖像選取控制器的媒體類型主要分為兩大類,圖片類型與視頻類型

kUTTypeImage(圖片類型,細分為kUTTypeJPEG、kUTTypeGIF、kUTTypeLivePhoto等)
kUTTypeMovie(視頻類型,細分為kUTTypeMovie、kUTTypeMP3、kUTTypeAVIMovie等)

注1: 媒體類型以常量形式定義,需要引入MobileCoreServices.framework

注2: 媒體類型常量是CFString類型,在使用時需要強轉為NSString類型

我們可以使用availableMediaTypesForSourceType:方法返回指定資源類型下支持的媒體類型數組

// 以"檢查圖像選擇器在相機類型下是否支持圖片類型"為例
// 返回相機類型下支持的媒體類型數組
NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
// 判斷數組中是否擁有(NSString *)kUTTypeImage元素
if ([availableMediaTypes containsObject:(NSString *)kUTTypeImage])
{
  // 圖片類型可用
}
else
{
  // 圖片類型不可用
}

這步操作根據用戶授權狀態決定是否彈出圖像選取控制器,比如用戶授權狀態為拒絕狀態,那么便需要提示用戶,而不是彈出一個黑屏的控制器

ios 調用相冊_ios調用系統相機相冊_ios調用相機和相冊

注: 需要引入AVFoundation.framework

相機媒體類型主要有兩種常用類型

AVMediaTypeVideo(視頻媒體類型)
AVMediaTypeAudio(音頻媒體類型)

用戶對相機的授權狀態是一個枚舉,擁有如下四種類型

AVAuthorizationStatusNotDetermined // 用戶沒有選擇是否授權使用
AVAuthorizationStatusRestricted // 用戶禁止使用,且授權狀態不可修改,可能由于家長控制功能
AVAuthorizationStatusDenied // 用戶已經禁止使用
AVAuthorizationStatusAuthorized // 用戶已經授權使用

produces:指定返回的內容類型,僅當request請求頭中的(accept)類型中包含該指定類型才返回。每當你需要以流的方式將文件送到瀏覽器中,你都的使用到file()方法的重載(而不是使用我們先前一直使用的view()方法),對于file()方法有3類返回類型:filepathresult,filecontentresult和filestreamresult,第一種類型用于直接從磁盤返回文件。這是不行的,我們可以用反證法來說明這個問題,因為我們有時候調用一個方法時也可以不定義返回結果變量,即不要關心其返回結果,例如,我們調用map.remove(key)方法時,雖然remove方法有返回值,但是我們通常都不會定義接收返回結果的變量,這時候假設該類中有兩個名稱和參數列表完全相同的方法,僅僅是返回類型不同,java就無法確定編程者倒底是想調用哪個方法了,因為它無法通過返回結果類型來判斷。

// 以"檢查用戶對視頻媒體類型的授權狀態"為例
// 返回用戶對視頻媒體類型的授權狀態
AVAuthorizationStatus authorizationStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
// 處理不同授權狀態下的操作流程
switch (authorizationStatus)
{
  case AVAuthorizationStatusNotDetermined:
  {
    // 用戶沒有選擇是否授權使用
  }
  break;
case AVAuthorizationStatusRestricted:
  {
    // 用戶禁止使用,且授權狀態不可修改,可能由于家長控制功能
  }
  break;
  case AVAuthorizationStatusDenied:
  {
    // 用戶已經禁止使用
  }
  break;
  case AVAuthorizationStatusAuthorized:
  {
    // 用戶已經授權使用
  }
  break;
}

彈窗作為廣告界的一種呈現模式,也自然有它獨特的發展空間,但是隨著網站建設及網站優化的日益完善,彈窗時代也會漸漸遠去,因為現如今大部分網站開始將用戶體驗放在首位,一切以用戶體驗為主ios調用相機和相冊,這就與彈窗推廣產生了不兼容,所以就網站用戶體驗的角度來講,還是建議不要使用彈窗模式來進行宣傳推廣,從而避免網站用戶體驗度得不到有效提升的現象發生。他們并沒有使用阻斷用戶正常操作的彈窗,而是在新聞資訊的信息流中溫柔地詢問這些用戶“您是否喜歡本產品。權限服務接入用戶服務后,可以在權限授權頁面上選取相應的用戶進行權限授權。

ios調用系統相機相冊_ios 調用相冊_ios調用相機和相冊

// 以"彈窗要求用戶選擇是否授權"為例
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
    if(granted)
    {
        // 用戶授權使用
    }
    else
    {
        // 用戶禁止使用
    }
}];

注1: 該彈窗只在授權狀態為AVAuthorizationStatusNotDetermined時才會顯示

注2: 在使用AVCaptureDeviceInput且授權狀態為AVAuthorizationStatusNotDetermined時,該彈窗會自動顯示

注: 需要引入AssetsLibrary.framework

用戶對相冊的授權狀態是一個枚舉,擁有如下四種類型

ALAuthorizationStatusNotDetermined // 用戶沒有選擇是否授權使用
ALAuthorizationStatusRestricted // 用戶禁止使用,且授權狀態不可修改,可能由于家長控制功能
ALAuthorizationStatusDenied // 用戶已經禁止使用
ALAuthorizationStatusAuthorized // 用戶已經授權使用

我們可以使用authorizationStatus方法返回用戶對相冊的授權狀態

// 以"檢查用戶對相冊的授權狀態"為例
// 返回用戶對相冊的授權狀態
ALAuthorizationStatus authorizationStatus = [ALAssetsLibrary authorizationStatus];
// 處理不同授權狀態下的操作流程
switch (authorizationStatus)
{
  case ALAuthorizationStatusNotDetermined:
  {
    // 用戶沒有選擇是否授權使用
  }
  break;
  case ALAuthorizationStatusRestricted:
  {
    // 用戶禁止使用,且授權狀態不可修改,可能由于家長控制功能
  }
  break;
  case ALAuthorizationStatusDenied:
  {
    // 用戶已經禁止使用
  }
  break;
  case ALAuthorizationStatusAuthorized:
  {
    // 用戶已經授權使用
  }
  break;
}

ios調用系統相機相冊_ios 調用相冊_ios調用相機和相冊

// 創建圖像選取控制器對象
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
// 將資源類型設置為相機類型
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
// 將媒體類型設置為圖片類型和視頻類型(數組中如果只寫一個,圖像選擇控制器即只允許拍照/錄像)
picker.mediaTypes = @[(NSString *)kUTTypeImage, (NSString *)kUTTypeMovie];
// 設置拍照后的圖片允許編輯
picker.allowsEditing = YES;
// 設置攝像圖像品質,默認是UIImagePickerControllerQualityTypeMedium
picker.videoQuality = UIImagePickerControllerQualityTypeHigh;
// 設置最長攝像時間,默認是10秒
picker.videoMaximumDuration = 30;
// 設置代理,需要遵守兩個協議
picker.delegate = self;
// 彈出圖像選取控制器
[self presentViewController:picker animated:YES completion:nil];,>

本文來自互聯網,由機器人自動采編,文章內容不代表本站觀點,請讀者自行辨別信息真偽,如有發現不適內容,請及時聯系站長處理。

相關閱讀
福彩山东时时彩