FSMediaPicker 0.0.2

FSMediaPicker 0.0.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2015 年 3 月

Ding Wenchao 维护。




  • 作者
  • Ding Wenchao

fsmediapicker-edit               fsmediapicker-circular-edited

目的

在 FSMediaPicker 之前如何从设备中选择图片

@interface OriginalViewController : UIViewController <UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

- (IBAction)pickButtonClicked:(id)sender;

@end

@implementation OriginalViewController

- (void)pickButtonClicked:(id)sender
{
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                                                            delegate:self 
                                                            cancelButtonTitle:@"Cancel" 
                                                            destructiveButtonTitle:nil 
                                                            otherButtonTitles:@"Take photo",
                                                                              @"Select photo from camera", nil];
    actionSheet.cancelButtonIndex = 2;
    [actionSheet showInView:sender];
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == actionSheet.cancelButtonIndex) {
        return;
    };
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.mediaTypes = @[(NSString *)kUTTypeImage];
    imagePicker.allowsEditing = YES;
    if (buttonIndex == 0 && [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    } else if (buttonIndex == 1 && [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }
    [self presentViewController:imagePicker animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    self.imageView.image = info[UIImagePickerControllerEditedImage];
    [picker dismissViewControllerAnimated:YES completion:nil];
}

@end

为什么我要为这么小的一个图片写那么长的页面呢?! why

使用 FSMediaPicker

@interface MediaPickerController : UIViewController <FSMediaPickerDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

- (IBAction)pickButtonClicked:(id)sender;

@end

@implementation MediaPickerController

- (void)pickButtonClicked:(id)sender
{
    FSMediaPicker *picker = [[FSMediaPicker alloc] init];
    picker.delegate = self;
    [picker showFromView: sender];
}

- (void)mediaPicker:(FSMediaPicker *)mediaPicker didFinishWithMediaInfo:(NSDictionary *)mediaInfo
{
    self.imageView.image = mediaInfo.editedImage; // Or mediaInfo[UIImagePickerControllerEditedImage]
}

@end

FSMediaPicker 可以为您处理所有繁琐的部分

还有更多

选择视频

mediaPicker.type = FSMediaTypeVideo // default is FSMediaTypePhoto

- (void)mediaPicker:(FSMediaPicker *)mediaPicker didFinishWithMediaInfo:(NSDictionary *)mediaInfo
{
    self.videoURL = mediaInfo.mediaURL; // Or mediaInfo[UIImagePickerControllerMediaURL]
}

fsmediapicker-type-video

同时选择图片和视频

mediaPicker.mediaType = FSMediaTypeAll

- (void)mediaPicker:(FSMediaPicker *)mediaPicker didFinishWithMediaInfo:(NSDictionary *)mediaInfo
    if (mediaInfo.mediaType == FSMediaTypeVideo) { // Or [mediaInfo[UIImagePickerControllerMediaType] isEqualToString:(NSString)kUTTypeMovie];
        NSURL *url = mediaInfo.mediaURL; // Or mediaInfo[UIImagePickerControllerMediaURL]
    } else if (mediaInfo.mediaType == FSMediaTypePhoto) { // Or [mediaInfo[UIImagePickerControllerMediaType] isEqualToString:(NSString)kUTTypeImage];
        UIImage *someImage = mediaInfo.editedImage // Or mediaInfo[UIImagePickerControllerEditedImage]
    }
}

fsmediapicker-type-all

一些香料

圆形裁剪

mediaPicker.editMode = FSEditModeCircular; // defualt is FSEditModeStandard

- (void)mediaPicker:(FSMediaPicker *)mediaPicker didFinishWithMediaInfo:(NSDictionary *)mediaInfo
{
    imageView.image = mediaInfo.circularEditedImage; // Or mediaInfo[UIImagePickerControllerCircularEditedImage]
}
  • 无论什么 editMode,包含 editedImagecircularEditedImagemediaInfo NSDictionary 都存在。这个设置是因为一些应用只需要显示圆形图像,但是需要在设备或服务器上保存矩形图像

UIImagePickerController 的自定义设置

- (void)mediaPicker:(FSMediaPicker *)mediaPicker willPresentImagePickerController:(UIImagePickerController *)imagePicker
{
    if ([imagePicker.sourceType isEqualToString:UIImagePickerControllerSourceTypeCamera]) {
        imagePicker.showsCameraControl = NO;
        imagePicker.cameraOverlayView = yourCustomOverlayView;
    }
}

当取消时

- (void)mediaPickerDidCancel:(FSMediaPicker *)mediaPicker
{
    // do something
}

此代理方法将在 UIActionSheet 取消或 UIImagePickerController 取消时被调用

支持闭包

@property (copy, nonatomic) void(^willPresentImagePickerBlock)(FSMediaPicker *mediaPicker, UIImagePickerController *imagePicker);
@property (copy, nonatomic) void(^finishBlock)(FSMediaPicker *mediaPicker, NSDictionary *mediaInfo);
@property (copy, nonatomic) void(^cancelBlock)(FSMediaPicker *mediaPicker);

中文选项

  • 如果系统语言设置为中文并且Project下的Localization下包含Chinese,则选项中的文字显示为中文
  • localization fsmediapicker-chinese

  • 若觉得文字不够高大上,在FSMediaPicker.m中开头的几个macro中设置对应文字。

// change the option string here
#define kTakePhotoString LocalizedString(@"Take photo")
#define kSelectPhotoFromLibraryString LocalizedString(@"Select photo from photo library")
#define kRecordVideoString LocalizedString(@"Record video")
#define kSelectVideoFromLibraryString LocalizedString(@"Select video from photo library")
#define kCancelString LocalizedString(@"Cancel")

安装

设置

  • cocoapods: 运行示例项目前,请克隆repo并在Example目录下运行pod install
  • 手动:将FSMediaPicker.hFSMediaPicker.m拖到您的项目中,确保检查如需要则复制

然后

#import "FSMediaPicker.h"

要求

iOS 7.0

贡献

作者

丁文超,[email protected]

许可

FSMediaPicker遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。