• 用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

  • 相关阅读:
    python测试开发django186.使用 jquery 的 .val() 无法获取input框的输入值(已解决) 上海
    2022年第 10 期《python接口web自动化+测试开发》课程,2月13号开学! 上海
    python测试开发django185.bootstraptable 后端搜索功能实现(queryParams) 上海
    python测试开发django184.bootstraptable 前端分页搜索相关配置 上海
    python测试开发django181.自定义过滤器(除法取余) 上海
    python测试开发django180.dockercompose部署django+mysql环境 上海
    python测试开发django183.bootstrapformvalidation重置校验的方法 上海
    pytest文档79 内置 fixtures 之 cache 写入和读取缓存数据 上海
    python测试开发django182.jQuery重置form表单 上海
    golang interface用法
  • 原文地址:https://www.cnblogs.com/poky/p/5306957.html
Copyright © 2020-2023  润新知