[关闭]
@fiy-fish 2017-03-24T22:27:03.000000Z 字数 5010 阅读 1283

工作日志2017-03-24 多线程(GCD)复习 ,手势第二部分,条形码扫描

工作日志


重新看了GCD的知识iOS多线程--彻底学会多线程之『GCD』


2017-03-24 手势第二部分

  1. UIScreenEdgePanGestureRecognizer *myScreenEdgePanGestureRecognizer;
  2. ...
  3. myScreenEdgePanGestureRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleScreenEdgePan:)];
  4. myScreenEdgePanGestureRecognizer.delegate = self;
  5. // Configure the gesture recognizer and attach it to the view.
  6. ...
  7. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
  8. BOOL result = NO;
  9. if ((gestureRecognizer == myScreenEdgePanGestureRecognizer) && [[otherGestureRecognizer view] isDescendantOfView:[gestureRecognizer view]]) {
  10. result = YES;
  11. }
  12. return result;
  13. }

关爱宝进行重构

  1. 项目目录太乱了,今天整理了一部分,明天把所有的目录都整理下,这个项目都是引用目录,没有创建真实目录,所有文件都是在一个文件项目文件夹中,看上去吓死人
  2. 昨天重构了appdelegate文件,今天重构了部分mainviewcontroller文件,之前写这个项目的人好像是不会用传值吧,凡是涉及到传值都写作了通知,一个文件里快10个通知,老子也是信你的邪
  3. 晚上抽时间把 条形码扫描搞定了,但是扫描精度太低,无法忍,下面贴一下条形码扫描的代码吧,跟二维码扫描差不多。。。话说车乐邦的二维码扫描精度也很低啊
  1. //导入AVFoundation框架
  2. #import <AVFoundation/AVFoundation.h>
  3. 第二步:
  4. //签协议,我们会在协议方法里获取到扫描结果
  5. @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
  6. 第三步:
  7. @property(nonatomic, strong)AVCaptureSession *session;//输入输出的中间桥梁
  8. 第四步:
  9. #pragma mark -- 开始扫描
  10. - (void)startScanWithSize:(CGFloat)sizeValue
  11. {
  12. //获取摄像设备
  13. AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
  14. //创建输入流
  15. AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
  16. //判断输入流是否可用
  17. if (input) {
  18. //创建输出流
  19. AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
  20. //设置代理,在主线程里刷新,注意此时self需要签AVCaptureMetadataOutputObjectsDelegate协议
  21. [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
  22. //初始化连接对象
  23. self.session = [[AVCaptureSession alloc]init];
  24. //高质量采集率
  25. [_session setSessionPreset:AVCaptureSessionPresetHigh];
  26. [_session addInput:input];
  27. [_session addOutput:output];
  28. //设置扫码支持的编码格式(如下设置条形码和二维码兼容)
  29. output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
  30. //扫描区域大小的设置:(这部分也可以自定义,显示自己想要的布局)
  31. AVCaptureVideoPreviewLayer *layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
  32. layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
  33. //设置为宽高为200的正方形区域相对于屏幕居中
  34. layer.frame = CGRectMake((self.view.bounds.size.width - sizeValue) / 2.0, (self.view.bounds.size.height - sizeValue) / 2.0, sizeValue, sizeValue);
  35. [self.view.layer insertSublayer:layer atIndex:0];
  36. //开始捕获图像:
  37. [_session startRunning];
  38. }
  39. }
  40. 第五步:
  41. #pragma mark -- 调用扫描方法
  42. - (void)viewDidLoad {
  43. [super viewDidLoad];
  44. //300为正方形扫描区域边长
  45. [self startScanWithSize:300];
  46. }
  47. 第六步:
  48. #pragma mark - 扫面结果在这个代理方法里获取到
  49. -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
  50. if (metadataObjects.count>0) {
  51. //获取到信息后停止扫描:
  52. [_session stopRunning];
  53. AVMetadataMachineReadableCodeObject *metaDataObject = [metadataObjects objectAtIndex:0];
  54. //输出扫描字符串:
  55. NSLog(@"%@", metaDataObject.stringValue);
  56. //移除扫描视图:
  57. AVCaptureVideoPreviewLayer *layer = (AVCaptureVideoPreviewLayer *)[[self.view.layer sublayers] objectAtIndex:0];
  58. [layer removeFromSuperlayer];
  59. }
  60. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注