如何自定义uiimagepickercontroller
1个回答
展开全部
1.设定imagePacker参数
// Transform values for full screen support:
#define CAMERA_TRANSFORM_X 1
// this works for iOS 4.x
#define CAMERA_TRANSFORM_Y 1.24299
-(void)viewWillAppear:(BOOL)animated{
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.showsCameraControls = NO;
imagePickerController.navigationBarHidden = YES;
imagePickerController.wantsFullScreenLayout = YES;
imagePickerController.cameraViewTransform =CGAffineTransformScale(imagePickerController.cameraViewTransform, CAMERA_TRANSFORM_X,CAMERA_TRANSFORM_Y);
cameraViewController = [[CameraOverlayViewControlleralloc]initWithNibName:@"CameraOverlayViewController" bundle:nil];
imagePickerController.cameraOverlayView = cameraViewController.view;
cameraViewController.pickerController = imagePickerController;
[self presentModalViewController:imagePickerController animated:NO];
[imagePickerController release];
}
2.代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
[picker dismissModalViewControllerAnimated:NO];
UIImage* image = [info valueForKey:UIImagePickerControllerOriginalImage];
BeautifyPhotoViewController* beautifyPhotoViewController = [[BeautifyPhotoViewControlleralloc]initWithNibName:@"BeautifyPhotoViewController" bundle:nil];
beautifyPhotoViewController.photoImage = image;
[self.navigationController pushViewController:beautifyPhotoViewController animated:YES];
[beautifyPhotoViewController release];
}
3.overlayView对应的controller
#import "CameraOverlayViewController.h"
@interface CameraOverlayViewController ()
@end
@implementation CameraOverlayViewController
@synthesize pickerController;
@synthesize cameraScaleBtn;
@synthesize titleImageView;
@synthesize flashModeBtn;
@synthesize deviceModeBtn;
@synthesize photoBtn;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[self getAllPhotoImages];
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
isOneToOne = YES;
imageArray = [[NSMutableArray alloc]init];
shadowView = [[ShadowView alloc]initWithRect:CGRectMake(0, 80, 320, 320)];
[self.view addSubview:shadowView];
[self.view sendSubviewToBack:shadowView];
[shadowView release];
// Do any additional setup after loading the view from its nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
//闪光灯
-(IBAction)cameraTorchOn:(id)sender{
if (pickerController.cameraFlashMode ==UIImagePickerControllerCameraFlashModeAuto) {
pickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
}else {
pickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
}
}
//前后摄像头
- (IBAction)swapFrontAndBackCameras:(id)sender {
if (pickerController.cameraDevice ==UIImagePickerControllerCameraDeviceRear ) {
pickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
}else {
pickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear;
}
}
//改变拍摄比例
-(IBAction)changeCameraScale:(id)sender{
if (isOneToOne) {
[shadowView changeRect:CGRectMake(0, 0, 320, 428)];
[cameraScaleBtn setImage:[UIImage imageNamed:@"font_-scale43.png"]forState:UIControlStateNormal];
titleImageView.alpha = 0.2;
flashModeBtn.alpha = 0.5;
deviceModeBtn.alpha = 0.5;
isOneToOne = NO;
}else {
[shadowView changeRect:CGRectMake(0, 80, 320, 320)];
[cameraScaleBtn setImage:[UIImage imageNamed:@"font_-scale11.png"]forState:UIControlStateNormal];
titleImageView.alpha = 1;
flashModeBtn.alpha = 1;
deviceModeBtn.alpha = 1;
isOneToOne = YES;
}
}
- (IBAction)enterPhotoAlbum:(id)sender {
PhotoAlbumViewController* photoAlbumViewController = [[PhotoAlbumViewControlleralloc]initWithNibName:@"PhotoAlbumViewController" bundle:nil];
[self presentModalViewController:photoAlbumViewController animated:YES];
}
//拍摄照片
-(IBAction)takeThePic:(id)sender{
[pickerController takePicture];
}
-(IBAction)backToHome:(id)sender{
[pickerController dismissModalViewControllerAnimated:NO];
[[NSNotificationCenter defaultCenter] postNotificationName:@"backToHome" object:nil];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void)dealloc
{
[cameraScaleBtn release];
[flashModeBtn release];
[deviceModeBtn release];
[titleImageView release];
[super dealloc];
}
-(void)getAllPhotoImages{
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){
NSLog(@"error occour =%@", [myerror localizedDescription]);
};
ALAssetsGroupEnumerationResultsBlock groupEnumerAtion = ^(ALAsset *result, NSUInteger index,BOOL *stop){
if (result!=NULL) {
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
[imageArray addObject:result];
UIImage *img=[UIImage imageWithCGImage:result.thumbnail];
[photoBtn setImage:img forState:UIControlStateNormal];
}
}
};
ALAssetsLibraryGroupsEnumerationResultsBlock
libraryGroupsEnumeration = ^(ALAssetsGroup* group, BOOL* stop){
if (group == nil) {
return;
}
if (group!=nil) {
[group enumerateAssetsUsingBlock:groupEnumerAtion];
}
};
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:libraryGroupsEnumeration
failureBlock:failureblock];
[library release];
}
@end
// Transform values for full screen support:
#define CAMERA_TRANSFORM_X 1
// this works for iOS 4.x
#define CAMERA_TRANSFORM_Y 1.24299
-(void)viewWillAppear:(BOOL)animated{
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.delegate = self;
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.showsCameraControls = NO;
imagePickerController.navigationBarHidden = YES;
imagePickerController.wantsFullScreenLayout = YES;
imagePickerController.cameraViewTransform =CGAffineTransformScale(imagePickerController.cameraViewTransform, CAMERA_TRANSFORM_X,CAMERA_TRANSFORM_Y);
cameraViewController = [[CameraOverlayViewControlleralloc]initWithNibName:@"CameraOverlayViewController" bundle:nil];
imagePickerController.cameraOverlayView = cameraViewController.view;
cameraViewController.pickerController = imagePickerController;
[self presentModalViewController:imagePickerController animated:NO];
[imagePickerController release];
}
2.代理方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
[picker dismissModalViewControllerAnimated:NO];
UIImage* image = [info valueForKey:UIImagePickerControllerOriginalImage];
BeautifyPhotoViewController* beautifyPhotoViewController = [[BeautifyPhotoViewControlleralloc]initWithNibName:@"BeautifyPhotoViewController" bundle:nil];
beautifyPhotoViewController.photoImage = image;
[self.navigationController pushViewController:beautifyPhotoViewController animated:YES];
[beautifyPhotoViewController release];
}
3.overlayView对应的controller
#import "CameraOverlayViewController.h"
@interface CameraOverlayViewController ()
@end
@implementation CameraOverlayViewController
@synthesize pickerController;
@synthesize cameraScaleBtn;
@synthesize titleImageView;
@synthesize flashModeBtn;
@synthesize deviceModeBtn;
@synthesize photoBtn;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
[self getAllPhotoImages];
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
isOneToOne = YES;
imageArray = [[NSMutableArray alloc]init];
shadowView = [[ShadowView alloc]initWithRect:CGRectMake(0, 80, 320, 320)];
[self.view addSubview:shadowView];
[self.view sendSubviewToBack:shadowView];
[shadowView release];
// Do any additional setup after loading the view from its nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
//闪光灯
-(IBAction)cameraTorchOn:(id)sender{
if (pickerController.cameraFlashMode ==UIImagePickerControllerCameraFlashModeAuto) {
pickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
}else {
pickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
}
}
//前后摄像头
- (IBAction)swapFrontAndBackCameras:(id)sender {
if (pickerController.cameraDevice ==UIImagePickerControllerCameraDeviceRear ) {
pickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
}else {
pickerController.cameraDevice = UIImagePickerControllerCameraDeviceRear;
}
}
//改变拍摄比例
-(IBAction)changeCameraScale:(id)sender{
if (isOneToOne) {
[shadowView changeRect:CGRectMake(0, 0, 320, 428)];
[cameraScaleBtn setImage:[UIImage imageNamed:@"font_-scale43.png"]forState:UIControlStateNormal];
titleImageView.alpha = 0.2;
flashModeBtn.alpha = 0.5;
deviceModeBtn.alpha = 0.5;
isOneToOne = NO;
}else {
[shadowView changeRect:CGRectMake(0, 80, 320, 320)];
[cameraScaleBtn setImage:[UIImage imageNamed:@"font_-scale11.png"]forState:UIControlStateNormal];
titleImageView.alpha = 1;
flashModeBtn.alpha = 1;
deviceModeBtn.alpha = 1;
isOneToOne = YES;
}
}
- (IBAction)enterPhotoAlbum:(id)sender {
PhotoAlbumViewController* photoAlbumViewController = [[PhotoAlbumViewControlleralloc]initWithNibName:@"PhotoAlbumViewController" bundle:nil];
[self presentModalViewController:photoAlbumViewController animated:YES];
}
//拍摄照片
-(IBAction)takeThePic:(id)sender{
[pickerController takePicture];
}
-(IBAction)backToHome:(id)sender{
[pickerController dismissModalViewControllerAnimated:NO];
[[NSNotificationCenter defaultCenter] postNotificationName:@"backToHome" object:nil];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (void)dealloc
{
[cameraScaleBtn release];
[flashModeBtn release];
[deviceModeBtn release];
[titleImageView release];
[super dealloc];
}
-(void)getAllPhotoImages{
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){
NSLog(@"error occour =%@", [myerror localizedDescription]);
};
ALAssetsGroupEnumerationResultsBlock groupEnumerAtion = ^(ALAsset *result, NSUInteger index,BOOL *stop){
if (result!=NULL) {
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
[imageArray addObject:result];
UIImage *img=[UIImage imageWithCGImage:result.thumbnail];
[photoBtn setImage:img forState:UIControlStateNormal];
}
}
};
ALAssetsLibraryGroupsEnumerationResultsBlock
libraryGroupsEnumeration = ^(ALAssetsGroup* group, BOOL* stop){
if (group == nil) {
return;
}
if (group!=nil) {
[group enumerateAssetsUsingBlock:groupEnumerAtion];
}
};
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:libraryGroupsEnumeration
failureBlock:failureblock];
[library release];
}
@end
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询