@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
@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]
}
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]
}
}
mediaPicker.editMode = FSEditModeCircular; // defualt is FSEditModeStandard
- (void)mediaPicker:(FSMediaPicker *)mediaPicker didFinishWithMediaInfo:(NSDictionary *)mediaInfo
{
imageView.image = mediaInfo.circularEditedImage; // Or mediaInfo[UIImagePickerControllerCircularEditedImage]
}
editMode
,包含 editedImage
和 circularEditedImage
的 mediaInfo
NSDictionary 都存在。这个设置是因为一些应用只需要显示圆形图像,但是需要在设备或服务器上保存矩形图像- (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);
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")
pod install
。FSMediaPicker.h
和FSMediaPicker.m
拖到您的项目中,确保检查如需要则复制
。#import "FSMediaPicker.h"
iOS 7.0
[email protected]
FSMediaPicker遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。