测试测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
Released 最后发布 | 2015年1月 |
由 Christian Roman 维护。
一个易于使用的 UIImagePickerController
替代品,用于选择图片和视频。
轻松选择、拍摄或使用最后拍摄的照片或视频!
UIImagePickerController
属性(相机叠加层、相机设备、相机视图变换、允许编辑等)。ALAsset
。(易于处理)。UIImagePickerController
)。有三种选择
CocoaPods
platform :ios
pod 'CRMediaPickerController'
...
pod install
以安装依赖项。源文件
CRMediaPickerController
的创建和显示方式与 UIImagePickerController
非常相似。要使用 CRMediaPickerController
,您需要创建一个实例、配置它、显示它并实现代理方法。
CRMediaPickerController
实例创建和显示的示例
self.mediaPickerController = [[CRMediaPickerController alloc] init];
self.mediaPickerController.delegate = self;
self.mediaPickerController.mediaType = CRMediaPickerControllerMediaTypeImage;
self.mediaPickerController.sourceType = CRMediaPickerControllerSourceTypePhotoLibrary;
[self.mediaPickerController show];
mediaType
选择或创建过程中的媒体类型。支持照片、视频或两者。
self.mediaPickerController.mediaType = (CRMediaPickerControllerMediaTypeImage | CRMediaPickerControllerMediaTypeVideo);
可用选项
typedef NS_OPTIONS(NSInteger, CRMediaPickerControllerMediaType) {
CRMediaPickerControllerMediaTypeImage = 1 << 0,
CRMediaPickerControllerMediaTypeVideo = 1 << 1
};
sourceType
选择或创建媒体文件的源。支持多个源。
self.mediaPickerController.sourceType = (CRMediaPickerControllerSourceTypePhotoLibrary | CRMediaPickerControllerSourceTypeCamera | CRMediaPickerControllerSourceTypeLastPhotoTaken);
可用选项
typedef NS_OPTIONS(NSInteger, CRMediaPickerControllerSourceType) {
CRMediaPickerControllerSourceTypePhotoLibrary = 1 << 0,
CRMediaPickerControllerSourceTypeCamera = 1 << 1,
CRMediaPickerControllerSourceTypeSavedPhotosAlbum = 1 << 2,
CRMediaPickerControllerSourceTypeLastPhotoTaken = 1 << 3
};
如果 sourceType
属性有多个源,它将显示一个 UIActionSheet,其中包含多个(和可用)选项以供选择。否则,将显示单个 sourceType
类型。
其他属性
@property (nonatomic, assign) NSTimeInterval videoMaximumDuration;
@property (nonatomic, assign) UIImagePickerControllerQualityType videoQualityType;
@property (nonatomic) BOOL allowsEditing;
@property (nonatomic, assign) UIImagePickerControllerCameraCaptureMode cameraCaptureMode;
@property (nonatomic, assign) UIImagePickerControllerCameraDevice cameraDevice;
@property (nonatomic, assign) UIImagePickerControllerCameraFlashMode cameraFlashMode;
@property (nonatomic, retain) UIView *cameraOverlayView;
@property (nonatomic, assign) CGAffineTransform cameraViewTransform;
@property (nonatomic, assign) BOOL showsCameraControls;
- (void)show;
- (void)dismiss;
- (BOOL)startVideoCapture;
- (void)stopVideoCapture;
- (void)takePicture;
一个 CRMediaPickerController
实例会将选定的媒体文件返回给 CRMediaPickerControllerDelegate
。该代理包含类似于 UIImagePickerControllerDelegate
的方法。控制器不是返回表示单个图像的字典,而是发送回原始的 ALAsset
对象,这些对象很容易处理。
- CRMediaPickerController:didFinishPickingAsset:error
通知代理选择过程已完成,媒体文件可 ready to use。
- (void)CRMediaPickerController:(CRMediaPickerController *)mediaPickerController didFinishPickingAsset:(ALAsset *)asset error:(NSError *)error;
参数
mediaPickerController | 提供此信息的 CRMediaPickerController 对象。 |
asset | 以 ALAsset 对象形式选择的媒体文件。 |
error | 描述为什么选择进程失败的错误对象。 |
- CRMediaPickerControllerDidCancel
通知代理用户已取消选择过程。
- (void)CRMediaPickerControllerDidCancel:(CRMediaPickerController *)mediaPickerController;
参数
mediaPickerController | 提供此信息的 CRMediaPickerController 对象。 |
#pragma mark - CPDMediaPickerControllerDelegate
- (void)CRMediaPickerController:(CRMediaPickerController *)mediaPickerController didFinishPickingAsset:(ALAsset *)asset error:(NSError *)error
{
if (!error) {
if (asset) {
if ([[asset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
ALAssetRepresentation *representation = asset.defaultRepresentation;
UIImage *image = [UIImage imageWithCGImage:representation.fullScreenImage];
self.imageView.image = image;
} else if ([[asset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:asset.defaultRepresentation.url];
self.moviePlayer.movieSourceType = MPMediaTypeMovie;
self.moviePlayer.controlStyle = MPMovieControlStyleDefault;
self.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
self.moviePlayer.repeatMode = MPMovieRepeatModeNone;
self.moviePlayer.allowsAirPlay = NO;
self.moviePlayer.shouldAutoplay = NO;
self.moviePlayer.view.frame = self.videoView.bounds;
self.moviePlayer.view.autoresizingMask = (UIViewAutoresizing)(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
[self.videoView addSubview:self.moviePlayer.view];
[self.moviePlayer prepareToPlay];
}
} else {
NSLog(@"No media selected");
}
} else {
NSLog(@"%@", error.localizedDescription);
}
}
- (void)CRMediaPickerControllerDidCancel:(CRMediaPickerController *)mediaPickerController
{
NSLog(@"%s", __PRETTY_FUNCTION__);
}
注意:使用 AssetsLibrary.framework
会提示用户授予对他们的照片的访问权限。
仅照片
self.mediaPickerController = [[CRMediaPickerController alloc] init];
self.mediaPickerController.delegate = self;
self.mediaPickerController.mediaType = CRMediaPickerControllerMediaTypeImage;
self.mediaPickerController.sourceType = CRMediaPickerControllerSourceTypePhotoLibrary | CRMediaPickerControllerSourceTypeCamera;
[self.mediaPickerController show];
仅视频
self.mediaPickerController = [[CRMediaPickerController alloc] init];
self.mediaPickerController.delegate = self;
self.mediaPickerController.mediaType = CRMediaPickerControllerMediaTypeVideo;
self.mediaPickerController.sourceType = CRMediaPickerControllerSourceTypeCamera;
self.mediaPickerController.allowsEditing = NO;
self.mediaPickerController.videoQualityType = UIImagePickerControllerQualityTypeMedium;
self.mediaPickerController.videoMaximumDuration = 60.0f;
[self.mediaPickerController show];
照片或视频
self.mediaPickerController = [[CRMediaPickerController alloc] init];
self.mediaPickerController.delegate = self;
self.mediaPickerController.mediaType = CRMediaPickerControllerMediaTypeImage | CRMediaPickerControllerMediaTypeVideo;
self.mediaPickerController.sourceType = CRMediaPickerControllerSourceTypeSavedPhotosAlbum;
[self.mediaPickerController show];
相机叠加
self.mediaPickerController = [[CRMediaPickerController alloc] init];
self.mediaPickerController.delegate = self;
self.mediaPickerController.mediaType = CRMediaPickerControllerMediaTypeImage;
self.mediaPickerController.sourceType = CRMediaPickerControllerSourceTypeCamera;
self.mediaPickerController.allowsEditing = NO;
self.mediaPickerController.showsCameraControls = NO;
[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
self.mediaPickerController.cameraOverlayView = self.overlayView;
self.overlayView = nil;
[self.mediaPickerController show];
具有特定属性的视频
self.mediaPickerController = [[CRMediaPickerController alloc] init];
self.mediaPickerController.delegate = self;
self.mediaPickerController.mediaType = CRMediaPickerControllerMediaTypeVideo;
self.mediaPickerController.sourceType = CRMediaPickerControllerSourceTypePhotoLibrary | CRMediaPickerControllerSourceTypeCamera;
self.mediaPickerController.allowsEditing = NO;
self.mediaPickerController.videoQualityType = UIImagePickerControllerQualityTypeMedium;
self.mediaPickerController.videoMaximumDuration = 60.0f;
[self.mediaPickerController show];
请参阅 示例 Xcode 项目以了解使用示例。
欢迎任何想为该项目做出贡献的人。
CRMediaPickerController
根据 MIT 许可证发布。请参阅 LICENSE。
Christian Roman