ios初级篇

iOS实现“摇一摇”与“扫一扫”功能示例代码

2017-02-14  本文已影响73人  等不来的期待

本篇文章主要介绍了iOS实现“摇一摇”与“扫一扫”功能示例代码;有需要的朋友可以作为参考下:

“摇一摇”功能的实现:

iPhone对 “摇一摇”有很好的支持,总体说来就两步:

在视图控制器中打开接受“摇一摇”的开关;

- (void)viewDidLoad {

// 设置允许摇一摇功能

[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;

// 并让自己成为第一响应者

[self becomeFirstResponder];

}

在“摇一摇”触发的制定的方法中实现需要实现的功能(”摇一摇“检测方法)。

// 摇一摇开始摇动

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {

NSLog(@"开始摇动");

//添加“摇一摇”动画

[self addAnimations];

//音效

AudioServicesPlaySystemSound (soundID);

return;

}

// “摇一摇”取消摇动

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {

NSLog(@"取消摇动");

return;

}

// “摇一摇”摇动结束

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {

if (event.subtype == UIEventSubtypeMotionShake) { // 判断是否是摇动结束

NSLog(@"摇动结束");

}

return;

}

”摇一摇“的动画效果:

- (void)addAnimations {

//音效

AudioServicesPlaySystemSound (soundID);

//让上面图片的上下移动

CABasicAnimation *translation2 = [CABasicAnimation animationWithKeyPath:@"position"];

translation2.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

translation2.fromValue = [NSValue valueWithCGPoint:CGPointMake(160, 115)];

translation2.toValue = [NSValue valueWithCGPoint:CGPointMake(160, 40)];

translation2.duration = 0.4;

translation2.repeatCount = 1;

translation2.autoreverses = YES;

//让下面的图片上下移动

CABasicAnimation *translation = [CABasicAnimation animationWithKeyPath:@"position"];

translation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

translation.fromValue = [NSValue valueWithCGPoint:CGPointMake(160, 345)];

translation.toValue = [NSValue valueWithCGPoint:CGPointMake(160, 420)];

translation.duration = 0.4;

translation.repeatCount = 1;

translation.autoreverses = YES;

[imgDown.layer addAnimation:translation forKey:@"translation"];

[imgUp.layer addAnimation:translation2 forKey:@"translation2"];

}

注意:在模拟器中运行时,可以通过「Hardware」-「Shake Gesture」来测试「摇一摇」功能。如下:

“扫一扫”功能的实现:

基于AVCaptureDevice做的二维码扫描器,基本步骤如下:

初始化相机,生成扫描器

设置参数

- (void)setupCamera {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

_device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

_input = [AVCaptureDeviceInput deviceInputWithDevice:_device error:nil];

_output = [[AVCaptureMetadataOutput alloc]init];

[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

_session = [[AVCaptureSession alloc]init];

[_session setSessionPreset:AVCaptureSessionPresetHigh];

if ([_session canAddInput:self.input])

{

[_session addInput:self.input];

}

if ([_session canAddOutput:self.output])

{

[_session addOutput:self.output];

}

// 条码类型 AVMetadataObjectTypeQRCode

_output.metadataObjectTypes = [NSArray arrayWithObjects:AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code, AVMetadataObjectTypeQRCode, nil];

dispatch_async(dispatch_get_main_queue(), ^{

//更新界面

_preview =[AVCaptureVideoPreviewLayer layerWithSession:self.session];

_preview.videoGravity = AVLayerVideoGravityResizeAspectFill;

_preview.frame = CGRectMake(0, 0, CGRectGetWidth(self.centerView.frame), CGRectGetHeight(self.centerView.frame));

[self.centerView.layer insertSublayer:self.preview atIndex:0];

[_session startRunning];

});

});

}

处理扫描结果:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {

NSString *stringValue;

if ([metadataObjects count] >0){

AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0];

stringValue = metadataObject.stringValue;

NSLog(@"%@",stringValue);

}

[_session stopRunning];

[timer invalidate];

_count ++ ;

[self stopReading];

if (stringValue && _count == 1)

{//扫描完成}

}

用二维码扫描器扫描自己的二维码:

NSString *url = [NSURL URLWithString:@"html/judgement.html" relativeToURL:[ZXApiClient sharedClient].baseURL].absoluteString;

if ([stringValue hasPrefix:url]) {

//如果扫出来的url是自己的域名开头的,那么做如下的处理

}

上一篇下一篇

猜你喜欢

热点阅读