iOS-蓝牙(GameKit)

作者: 指头飞血 | 来源:发表于2017-07-07 10:30 被阅读488次

    GameKit框架简介

    1.使用GameKit框架,可以在游戏中增加对等链接,又称对端链接或点对点链接,Peer To Peer
    2.使用GameKit框架中的对等网络链接API,可以在游戏玩家之间建立一个对等网络,并在游戏/应用实例之间交换数据
    3.GameKit框架可以使用蓝牙在玩家之间创建网络,玩家甚至不需要连接到互联网,就可以彼此对战

    代码

    //
    //  ViewController.m
    //  蓝牙(GameKit)
    //
    //  Created by ws on 2017/6/14.
    //  Copyright © 2017年 王松. All rights reserved.
    //
    
    #import "ViewController.h"
    #import <GameKit/GameKit.h>
    @interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate,GKPeerPickerControllerDelegate>
    @property (strong, nonatomic) IBOutlet UIImageView *imageView;
    /**保留会话用于发送数据*/
    @property(nonatomic,strong)GKSession*session;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    #pragma mark 链接设备
    -(IBAction)connectDevice:(id)sender{
    //1.创建查找设备的控制器
        GKPeerPickerController *ppc = [[GKPeerPickerController alloc]init];
    //2.设置代理
        ppc.delegate = self;
    //3.弹出控制器
        [ppc show];
    }
    #pragma mark 链接成功后会调用此方法
    /**
     链接成功后会调用此方法
     @param peerID 设备节点ID
     @param session 会话(使用该会话对象来相互传输数据)
     */
    - (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session{
        //NSLog(@"---%@",peerID);
        //1.保留会话
        self.session = session;
        //2.设置数据接受者
        [self.session setDataReceiveHandler:self withContext:nil];
        
        //2.退出选择设备的控制器
        [picker dismiss];
    }
    
    #pragma mark 选择照片
    -(IBAction)pickImage{
    /**
     UIImagePickerControllerSourceTypePhotoLibrary 图片库
     UIImagePickerControllerSourceTypeCamera 相机
     UIImagePickerControllerSourceTypeSavedPhotosAlbum 相册
     */
    //1.判断照片源是否可以
        if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])return;
    //2.创建照片选择控制器
        UIImagePickerController *ipc = [[UIImagePickerController alloc]init];
    //3.设置照片源
        ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    //4.设置代理 获取照片
        ipc.delegate = self;
    //5.弹出控制器
        [self presentViewController:ipc animated:YES completion:nil];
    }
    #pragma mark 当选中某一个照片的时候会调用这个代理方法
    /**
     当选中某一个照片的时候会调用这个代理方法
     @param info 存放着照片信息
     */
    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
        // 1.取出照片
        self.imageView.image = info[UIImagePickerControllerOriginalImage];
        //2.退出控制器
        [picker dismissViewControllerAnimated:YES completion:nil];
    }
    
    #pragma mark 发送照片
    -(IBAction)sendImage{
        //0.判断image如果为空直接返回
        if (!self.imageView.image) return;
    
        //1.将UIImage转化成NSData
       //NSData *data = UIImagePNGRepresentation(self.imageView.image);
        NSData *data = UIImageJPEGRepresentation(self.imageView.image, 0.5);//参数2:表示压缩质量
        //2.发送照片
        /**
         GKSendDataReliable //可靠传输(数据一定会被传达,如果中间网络放生状况,会重新连接,再次传输)-->相当于TCP(数据传输通道)
         GKSendDataUnreliable,//不可靠传输(数据只会发送一次,如果中间网络放生状况,没有收到就算啦)-->相当于UDP(数据传输通道)
         */
        [self.session sendDataToAllPeers:data withDataMode:GKSendDataReliable error:nil];
        
            //self.session sendData:<#(NSData *)#> toPeers:(NSArray *) withDataMode:<#(GKSendDataMode)#> error:<#(NSError *__autoreleasing *)#>
    }
    
    #pragma mark 接受数据
    /**
     当接受到数据的时候会调用该方法
     @param data 接受到的数据
     @param peer 从哪一个节点接受到的数据
     @param session 会话
     */
    - (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context{
        //1.将NSData转换成UIImage对象
        UIImage *receiveImage = [UIImage imageWithData:data];
        //2.设置到imageView上
        self.imageView.image = receiveImage;
        //3.将图片保存到相册
        UIImageWriteToSavedPhotosAlbum(receiveImage, nil, nil, nil);
    }
    @end
    
    

    相关文章

      网友评论

        本文标题:iOS-蓝牙(GameKit)

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