用UIImagePickerViewController自定义相机界面

用UIImagePickerViewController自定义相机界面--原文地址

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 = [[BeautifyPhotoViewController alloc]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

原文地址:https://www.cnblogs.com/poky/p/5306957.html