你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS App中挪用相冊中圖片及獲得比來的一張圖片的辦法

iOS App中挪用相冊中圖片及獲得比來的一張圖片的辦法

編輯:IOS開發綜合

UIImagePickerController從攝影、圖庫、相冊獲得圖片

IOS 獲得圖片有三種辦法:

1. 直接挪用攝像頭攝影

2. 從相冊當選擇

3. 從圖庫當選擇

UIImagePickerController 是體系供給的用來獲得圖片和視頻的接口;

用UIImagePickerController 類來獲得圖片視頻,年夜體分為以下幾個步調:

1. 初始化UIImagePickerController 類;

2. 設置UIImagePickerController 實例的數據起源類型(上面說明);

3. 設置設置署理;

4. 假如須要做圖片修正的話設置allowsEditing =yes。

數據起源類型一共有三種:

enum {
   UIImagePickerControllerSourceTypePhotoLibrary ,//來自圖庫
   UIImagePickerControllerSourceTypeCamera ,//來自相機
   UIImagePickerControllerSourceTypeSavedPhotosAlbum //來自相冊
};

在用這些起源的時刻最好檢測以下裝備能否支撐;

 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        NSLog(@"支撐相機");
    }
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
    {
        NSLog(@"支撐圖庫");
    }
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
    {
        NSLog(@"支撐相片庫");
    }

挪用攝像頭來獲得資本

- (void)viewDidLoad {
    [super viewDidLoad];
    picker = [[UIImagePickerController alloc]init];
    picker.view.backgroundColor = [UIColor orangeColor];
    UIImagePickerControllerSourceType sourcheType = UIImagePickerControllerSourceTypeCamera;
    picker.sourceType = sourcheType;
    picker.delegate = self;
    picker.allowsEditing = YES;
}

下面只是實例了UIImagePickerController及其屬性 在須要獲得圖片的時刻須要彈出窗口挪用

[self presentViewController:picker animated:YES completion:nil];

我們還須要署理來獲得我們選中的圖片

UIImagePickerControllerDelegate
署理中一共三個辦法 個中一個3.0 曾經放棄了,只剩下兩個我們須要用的

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
 *)info;

當用戶拔取完成後挪用;

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;

當用戶撤消拔取時挪用;

- (void)imagePickerController:(UIImagePickerController *)picker
 didFinishPickingMediaWithInfo:(NSDictionary *)info;

拔取的信息都在info中,info 是一個字典。

字典中的鍵:

  • NSString *const  UIImagePickerControllerMediaType ;指定用戶選擇的媒體類型(文章最初停止擴大)
  • NSString *const  UIImagePickerControllerOriginalImage ;原始圖片
  • NSString *const  UIImagePickerControllerEditedImage ;修正後的圖片
  • NSString *const  UIImagePickerControllerCropRect ;裁剪尺寸
  • NSString *const  UIImagePickerControllerMediaURL ;媒體的URL
  • NSString *const  UIImagePickerControllerReferenceURL ;原件的URL
  • NSString *const  UIImagePickerControllerMediaMetadata;當來數據起源是拍照機的時刻這個值才有用


獲得比來的一張圖片

比來的需求須要我模擬微信聊天提醒最新的一張圖片這個功效。
先講講思緒。
思緒很簡略,點擊“+”號的時刻獲得相冊列表,獲得最新保留的一張圖片。依據圖片保留時光,與以後時光戳停止盤算,取得距離時光。從而斷定能否是需求的時光距離。(時光距離自界說)
盤算公式:以後時光 - 圖片保留時光 <= 時光距離
那末依據這個思緒就開端寫一個分類。
它是關於ALAssetsLibrary的獲得功效,那末就依據他寫一個分類。
然則在IOS9後這個庫過時了,不外照樣將他封裝一份,到時刻新建一個對象類停止適配就好了。

//ALAssetsLibrary+WJ.h
#import <AssetsLibrary/AssetsLibrary.h>
@interface ALAssetsLibrary (WJ)
/**
 *  獲得最新一張圖片
 *
 *  @param block 回調
 */
- (void)latestAsset:(void(^_Nullable)(ALAsset * _Nullable asset,NSError *_Nullable error)) block;
@end
//ALAssetsLibrary+WJ.m
#import "ALAssetsLibrary+WJ.h"
@implementation ALAssetsLibrary (WJ)
- (void)latestAsset:(void (^)(ALAsset * _Nullable, NSError *_Nullable))block {
    [self enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if (group) {
            [group setAssetsFilter:[ALAssetsFilter allPhotos]];
            [group enumerateAssetsWithOptions:NSEnumerationReverse/*遍歷方法*/ usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
                if (result) {
                    if (block) {
                        block(result,nil);
                    }
                    *stop = YES;
                }
            }];
            *stop = YES;
        }
    } failureBlock:^(NSError *error) {
        if (error) {
            if (block) {
                block(nil,error);
            }
        }
    }];
}
@end

在IOS8 PhotoKit曾經存在了。所以今後寫iOS8以上的運用可以直接應用。
PhotoKit簡略適用封裝。詳細具體機能請看參考供給的鏈接。

//PHAsset+WJ.h
#import <Photos/Photos.h>
@interface PHAsset (WJ)
/**
 *  獲得最新一張圖片
 */
+ (PHAsset *)latestAsset;
@end
//PHAsset+WJ.m
#import "PHAsset+WJ.h"
@implementation PHAsset (WJ)
+ (PHAsset *)latestAsset {
    // 獲得一切資本的聚集,並按資本的創立時光排序
    PHFetchOptions *options = [[PHFetchOptions alloc] init];
    options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
    PHFetchResult *assetsFetchResults = [PHAsset fetchAssetsWithOptions:options];
    return [assetsFetchResults firstObject];
}
@end

依據需求本文章不供給其他功效寫法(ps:最重要自己也才剛應用>.<)。
圖片保留時光 都可以在對應的asset(PHAsset,AlAsset)外面獲得到。

【iOS App中挪用相冊中圖片及獲得比來的一張圖片的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved