你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> 整理UIImagePickerController、保存圖片到相冊問題

整理UIImagePickerController、保存圖片到相冊問題

編輯:IOS技巧綜合
[摘要]本文是對整理UIImagePickerController、保存圖片到相冊問題的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。
//此方法在ios8.0系統上,之前用代碼創建的相冊,手動刪除它,再用這個庫去創建剛被刪除的相冊,這個時候方法回調是不會跑fail模塊的,它走的是正常流程,但是帶回來的group卻是nil造成崩潰原因
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary addAssetsGroupAlbumWithName:@"iOSDevTip1" resultBlock:^(ALAssetsGroup *group12) {
    [groups addObject:group12];
} failureBlock:nil];
//為了解決iOS8.0以上系統下無法通過代碼創建被刪除過的同名相冊
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^
 {
     [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"琳小兮"];
     
 } completionHandler:^(BOOL success, NSError *error)
 {
     if (!success) {
         NSLog(@"---error:%@",error.userInfo);
     }
 }];

補充

#pragma mark ----- 攝像頭和相冊相關 -----

// 判斷設備是否有攝像頭
- (BOOL)isCameraAvailable {
    return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
}

// 判斷前面的攝像頭是否可用
- (BOOL)isFrontCameraAvailable {
    return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
}

// 判斷後面的攝像頭是否可用
- (BOOL)isRearCameraAvailable {
    return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
}

// 判斷是否支持某種多媒體類型:拍照片、拍視頻
- (BOOL)cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType {
    __block BOOL result = NO;
    if ([paramMediaType length] == 0){
        NSLog(@"Media type is empty.");
        return NO;
    }
    NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:paramSourceType];
    [availableMediaTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL*stop) {
        NSString *mediaType = (NSString *)obj;
        if ([mediaType isEqualToString:paramMediaType]){
            result = YES;
            *stop = YES;
        }
        
    }];
    return result;
}

// 判斷攝像頭是否支持錄像
- (BOOL)doesCameraSupportShootingVideos {
    return [self cameraSupportsMedia:(NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypeCamera];
}

// 判斷攝像頭是否支持拍照
- (BOOL)doesCameraSupportTakingPhotos {
    return [self cameraSupportsMedia:(NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];
}


#pragma mark ----- 相冊文件選取相關 -----

// 判斷相冊是否可用
- (BOOL) isPhotoLibraryAvailable{
    return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary];
}

// 判斷是否可以在相冊中選擇視頻
- (BOOL) canUserPickVideosFromPhotoLibrary {
    return [self cameraSupportsMedia:( NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}

// 判斷是否可以在相冊中選擇照片
- (BOOL) canUserPickPhotosFromPhotoLibrary {
    return [self cameraSupportsMedia:( NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}

------------------------------------- 2017.01.10補充 ----------------------------------

enum PHAssetCollectionType : Int {
    case Album //從 iTunes 同步來的相冊,以及用戶在 Photos 中自己建立的相冊
    case SmartAlbum //經由相機得來的相冊
    case Moment //Photos 為我們自動生成的時間分組的相冊
}

enum PHAssetCollectionSubtype : Int {
    case AlbumRegular //用戶在 Photos 中創建的相冊,也就是我所謂的邏輯相冊
    case AlbumSyncedEvent //使用 iTunes 從 Photos 照片庫或者 iPhoto 照片庫同步過來的事件。然而,在iTunes 12 以及iOS 9.0 beta4上,選用該類型沒法獲取同步的事件相冊,而必須使用AlbumSyncedAlbum。
    case AlbumSyncedFaces //使用 iTunes 從 Photos 照片庫或者 iPhoto 照片庫同步的人物相冊。
    case AlbumSyncedAlbum //做了 AlbumSyncedEvent 應該做的事
    case AlbumImported //從相機或是外部存儲導入的相冊,完全沒有這方面的使用經驗,沒法驗證。
    case AlbumMyPhotoStream //用戶的 iCloud 照片流
    case AlbumCloudShared //用戶使用 iCloud 共享的相冊
    case SmartAlbumGeneric //文檔解釋為非特殊類型的相冊,主要包括從 iPhoto 同步過來的相冊。由於本人的 iPhoto 已被 Photos 替代,無法驗證。不過,在我的 iPad mini 上是無法獲取的,而下面類型的相冊,盡管沒有包含照片或視頻,但能夠獲取到。
    case SmartAlbumPanoramas //相機拍攝的全景照片
    case SmartAlbumVideos //相機拍攝的視頻
    case SmartAlbumFavorites //收藏文件夾
    case SmartAlbumTimelapses //延時視頻文件夾,同時也會出現在視頻文件夾中
    case SmartAlbumAllHidden //包含隱藏照片或視頻的文件夾
    case SmartAlbumRecentlyAdded //相機近期拍攝的照片或視頻
    case SmartAlbumBursts //連拍模式拍攝的照片,在 iPad mini 上按住快門不放就可以了,但是照片依然沒有存放在這個文件夾下,而是在相機相冊裡。
    case SmartAlbumSlomoVideos //Slomo 是 slow motion 的縮寫,高速攝影慢動作解析,在該模式下,iOS 設備以120幀拍攝。不過我的 iPad mini 不支持,沒法驗證。
    case SmartAlbumUserLibrary //這個命名最神奇了,就是相機相冊,所有相機拍攝的照片或視頻都會出現在該相冊中,而且使用其他應用保存的照片也會出現在這裡。
    case Any //包含所有類型
}
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved