b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

30分钟搞定iOS自定义相机

电脑杂谈  发布时间:2019-05-11 06:22:59  来源:网络整理

ios 切换_ios segmented 切换tableview_ios 切换

  1. #import <AVFoundation/AVFoundation.h> 
  2. //捕获设备,通常是前置,后置,麦克风(音频输入)  
  3. @property (nonatomic, strong) AVCaptureDevice *device;  
  4.  
  5. //AVCaptureDeviceInput 代表输入设备,他使用AVCaptureDevice 来初始化  
  6. @property (nonatomic, strong) AVCaptureDeviceInput *input;  
  7.  
  8. //输出图片  
  9. @property (nonatomic ,strong) AVCaptureStillImageOutput *imageOutput;  
  10.  
  11. //session:由他把输入输出结合在一起,并开始启动捕获设备()  
  12. @property (nonatomic, strong) AVCaptureSession *session;  
  13.  
  14. //图像预览层,实时显示捕获的图像  
  15. @property (nonatomic ,strong) AVCaptureVideoPreviewLayer *previewLayer; 

2、初始化各个对象

  1. - (void)cameraDistrict  
  2. {  
  3. //    AVCaptureDevicePositionBack  后置  
  4. //    AVCaptureDevicePositionFront 前置  
  5.    self.device = [self cameraWithPosition:AVCaptureDevicePositionFront];  
  6.     self.input = [[AVCaptureDeviceInput alloc] initWithDevice:self.device error:nil];  
  7.  
  8.     self.imageOutput = [[AVCaptureStillImageOutput alloc] init];  
  9.  
  10.     self.session = [[AVCaptureSession alloc] init];  
  11.     //     拿到的图像的大小可以自行设定  
  12.     //    AVCaptureSessionPreset320x240  
  13.     //    AVCaptureSessionPreset352x288  
  14.     //    AVCaptureSessionPreset640x480  
  15.     //    AVCaptureSessionPreset960x540  
  16.     //    AVCaptureSessionPreset1280x720  
  17.     //    AVCaptureSessionPreset1920x1080  
  18.     //    AVCaptureSessionPreset3840x2160  
  19.     self.session.sessionPreset = AVCaptureSessionPreset640x480;  
  20.     //输入输出设备结合  
  21.     if ([self.session canAddInput:self.input]) {  
  22.         [self.session addInput:self.input];  
  23.     }  
  24.     if ([self.session canAddOutput:self.imageOutput]) {  
  25.         [self.session addOutput:self.imageOutput];  
  26.     }  
  27.     //预览层的生成  
  28.     self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];  
  29.     self.previewLayer.frame = CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT-64);  
  30.     self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;  
  31.     [self.view.layer addSublayer:self.previewLayer];  
  32.     //设备取景开始  
  33.     [self.session startRunning];  
  34.     if ([_device lockForConfiguration:nil]) {  
  35.     //自动闪光灯,  
  36.         if ([_device isFlashModeSupported:AVCaptureFlashModeAuto]) {  
  37.             [_device setFlashMode:AVCaptureFlashModeAuto];  
  38.         }  
  39.         //自动白平衡,但是好像一直都进不去  
  40.         if ([_device isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeAutoWhiteBalance]) {  
  41.             [_device setWhiteBalanceMode:AVCaptureWhiteBalanceModeAutoWhiteBalance];  
  42.         }  
  43.         [_device unlockForConfiguration];  
  44.     }  
  45.  

根据前后置位置拿到相应的:

  1. - (AVCaptureDevice *)cameraWithPosition:(AVCaptureDevicePosition)position{  
  2.     NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];  
  3.     for ( AVCaptureDevice *device in devices )  
  4.         if ( device.position == position ){  
  5.             return device;  
  6.         }  
  7.     return nil;  

ios 切换_ios segmented 切换tableview_ios 切换

3、拍照拿到相应图片:

  1. - (void)photoBtnDidClick  
  2. {  
  3.     AVCaptureConnection *conntion = [self.imageOutput connectionWithMediaType:AVMediaTypeVideo];  
  4.       if (!conntion) {  
  5.           NSLog(@"拍照失败!");  
  6.           return;  
  7.           }  
  8.     [self.imageOutput captureStillImageAsynchronouslyFromConnection:conntion completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {  
  9.         if (imageDataSampleBuffer == nil) {  
  10.             return ;  
  11.           }  
  12.         NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];  
  13.         self.image = [UIImage imageWithData:imageData];  
  14.         [self.session stopRunning];  
  15.         [self.view addSubview:self.cameraImageView];  

4、前后置的切换

  1. - (void)changeCamera{  
  2.     NSUInteger cameraCount = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo] count];  
  3.     if (cameraCount > 1) {  
  4.         NSError *error;  
  5.         //给的切换添加翻转  
  6.         CATransition *animation = [CATransition animation];  
  7.         animation.duration = .5f;  
  8.         animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  
  9.         animation.type = @"oglFlip";  
  10.  
  11.         AVCaptureDevice *newCamera = nil;  
  12.         AVCaptureDeviceInput *newInput = nil;  
  13.   //拿到另外一个位置  
  14.         AVCaptureDevicePosition position = [[_input device] position];  
  15.         if (position == AVCaptureDevicePositionFront){  
  16.             newCamera = [self cameraWithPosition:AVCaptureDevicePositionBack];  
  17.             animation.subtype = kCATransitionFromLeft;//翻转方向  
  18.         }  
  19.         else {  
  20.             newCamera = [self cameraWithPosition:AVCaptureDevicePositionFront];  
  21.             animation.subtype = kCATransitionFromRight;//翻转方向  
  22.         }  
  23.         //生成新的输入  
  24.         newInput = [AVCaptureDeviceInput deviceInputWithDevice:newCamera error:nil];  
  25.         [self.previewLayer addAnimation:animation forKey:nil];  
  26.         if (newInput != nil) {  
  27.             [self.session beginConfiguration];  
  28.             [self.session removeInput:self.input];  
  29.             if ([self.session canAddInput:newInput]) {  
  30.                 [self.session addInput:newInput];  
  31.                 self.input = newInput;  
  32.  
  33.             } else {  
  34.                 [self.session addInput:self.input];  
  35.             }  
  36.             [self.session commitConfiguration];  
  37.  
  38.         } else if (error) {  
  39.             NSLog(@"toggle carema failed, error = %@", error);  
  40.         }  
  41.     }  


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-97820-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...