美文网首页
高新技术:二维码 & 摇一摇 & 分享

高新技术:二维码 & 摇一摇 & 分享

作者: WhisperMax | 来源:发表于2016-03-20 10:20 被阅读0次

    1. 二维码

    iOS7之前使用第三番 Z-Xing Z-Bar
    iOS7之后系统提供原生方式

    • 二维码的生成,通过一定的规则把数据转换成图片

        //1.创建一个种类的滤镜
      

    ***二维码
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    ***条形码
    CIFilter *filter1 = [CIFilter filterWithName:@"CICode128BarcodeGenerator"];
    //2.恢复滤镜的默认设置(清除已经设置过的效果)
    [filter setDefaults];

    //3.将隐藏的地址变成二进制数据
    NSData *data = [@"http://www.baidu.com" dataUsingEncoding:NSUTF8StringEncoding];
    
    //4.通过KVC的方式设置滤镜,传入要隐藏的data
    //滤镜就能够依据data生成二维码
    [filter setValue:data forKey:@"inputMessage"];
    
    //5.输出二维码图片
    CIImage *outputImage = [filter outputImage];
    
    //6.将CIImage转换成UIImage
    UIImage *image = [UIImage imageWithCIImage:outputImage];
    
    //7.显示
    self.imageView.image = image;
    
    - 扫描二维码
     1. 打开后置摄像头
     2. 从后置摄像头中读取数据输入流
     3. 把输入流输出到屏幕上---输出流
     4. 把输入流和输出流连接起来---管道session
     5. 让输出流实时过滤数据,监听是否有二维码(条形码)如果有就通过协议通知我们
    
    

    import "ViewController.h"

    import <AVFoundation/AVFoundation.h>

    @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>

    • (IBAction)startScan:(id)sender;
      /** 连接输入输出流的对象/
      @property (nonatomic,strong)AVCaptureSession * session;
      /
      * 用于展示输出流的对象*/
      @property (nonatomic,strong)AVCaptureVideoPreviewLayer * videoLayer;
      @end

    @implementation ViewController

    • (void)viewDidLoad {
      [super viewDidLoad];
      }

    • (IBAction)startScan:(id)sender {
      //1.获取后置摄像头管理对象
      AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
      //2.获取输入流
      NSError *error = nil;
      AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
      if (error) {
      NSLog(@"%@",error);
      }
      //3.创建输出流 (把图像显示)
      AVCaptureMetadataOutput *output = [AVCaptureMetadataOutput new];
      //设置代理
      [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

      //4.构建连接通道
      _session = [AVCaptureSession new];
      [_session addInput:input];
      [_session addOutput:output];

      //5.通道质量设置(流畅 高清 标清)
      [_session setSessionPreset:AVCaptureSessionPresetHigh];

      //6.设置输出流的类型(二维码 条形码...)一定要在通道连接之后设置,否则不起作用
      output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeCode128Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeEAN13Code];

      //7.显示
      _videoLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
      _videoLayer.frame = self.view.bounds;

      [self.view.layer addSublayer:_videoLayer];

      //8.启动通道
      [self.session startRunning];
      }

    pragma mark -AVCaptureMetadataOutputObjectsDelegate

    //当扫描到数据时
    -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
    if (metadataObjects.count > 0) {
    [_session stopRunning];
    [_videoLayer removeFromSuperlayer];
    //拿出扫描数据
    AVMetadataMachineReadableCodeObject *object = metadataObjects.firstObject;
    NSLog(@"扫描到的数据是:%@",[object stringValue]);
    }
    }```

    2. 摇一摇

    • 1 开始摇一摇
      -(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
    • 2 结束摇一摇
      -(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
    • 3 取消摇一摇(被中断,例如:来电)
      -(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event

    3. 社会化分享

    • 4.1 分享到各方平台。例如:分享到新浪微博->第三方登录->分享
    • 4.2 系统自带的分享
      ->iOS6之后集成新浪微博
      ->iOS7之后支持腾讯微博
    #import "ViewController.h"
    #import <Social/Social.h>
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) {
            NSLog(@"不支持新浪微博");
        }
        //1.创建类型
        SLComposeViewController *cvc = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];
        //2.设置数据
        [cvc setInitialText:@"潮湿的不得了"];
        [cvc addImage:[UIImage imageNamed:@"icon"]];
        //3.显示
        [self presentViewController:cvc animated:YES completion:nil];
        //4.监听
        cvc.completionHandler = ^(SLComposeViewControllerResult result){
            if (result == SLComposeViewControllerResultDone) {
                NSLog(@"发布成功");
            }else{
                NSLog(@"发布失败");
            }
        };
    }
    

    @友盟分享

    如果运行在真机,程序崩溃 出现bitcode
     Target -> Build Setting ->修改BitCode```
    @[添加微信分享](http://dev.umeng.com/social/ios/detail-share#2_1)->设置scheme->设置白名单

    相关文章

      网友评论

          本文标题:高新技术:二维码 & 摇一摇 & 分享

          本文链接:https://www.haomeiwen.com/subject/cjahlttx.html