iOS开发拓展篇—蓝牙之GameKit使用
生活随笔
收集整理的這篇文章主要介紹了
iOS开发拓展篇—蓝牙之GameKit使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
藍牙
GameKit
簡介:
* 實現藍牙設備之間的通訊
* 只能使用在iOS設備之間同一個應用內連接
* 從iOS7開始過期了
* 但是GameKit是最基本的藍牙通訊框架
* 通過藍牙可以實現文件的共享(僅限設備沙盒中的文件)
* 此框架一般用于游戲開發(比如五子棋對戰)
開始案例
簡介:
* 使用藍牙將兩個iOS設備連接起來
* 搜索對方的設備
* 實現將手機中的圖片發送給對方
界面的搭建:
藍牙互連:
搜索藍牙設備
// 初始化鏈接藍牙控制器
GKPeerPickerController *peerCtr = [[GKPeerPickerController alloc] init];
// 顯示匹配到的藍牙設備
[peerCtr show];
GKPeerPickerController最重要的兩個代理
/**
* 鏈接成功
*
* @param picker 藍牙控制器
* @param peerID 連接藍牙的設備id
* @param session 連接藍牙的會話(通訊)用來傳數據
*/
- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session
{
NSLog(@"%s %d",__func__,__LINE__);
// 隱藏藍牙控制器
[picker dismiss];
}
// 退出連接
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker
{
NSLog(@"%s %d",__func__,__LINE__);
}
選擇圖片:
選擇圖片方法
// 選擇圖片
- (IBAction)chooseImage {
// 1.初始化圖片選擇控制器
UIImagePickerController *imgPicker = [[UIImagePickerController alloc]init];
// 2.判斷圖庫是否可用
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
// 3.設置圖庫打開的類型
imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
// 4. 設置代理
imgPicker.delegate = self;
// 5. 打開圖庫
[self presentViewController:imgPicker animated:YES completion:nil];
}
}
選擇圖片控制器的代理方法
/**
* 圖片選擇完成調用
*
* @param picker 圖片選擇控制器
* @param info 選擇的信息
*/
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
NSLog(@"info == %@",info);
// 設置選擇的圖片為當前的顯示圖片
self.showImageView.image = info[UIImagePickerControllerOriginalImage];
// 隱藏當前選擇圖片控制器
[picker dismissViewControllerAnimated:YES completion:nil];
}
圖片相互發送:
需要在連接成功代理方法中存儲當前的會話
// 保存當前回話
self.m_Session = session;
發送圖片方法
// 發送圖片
- (IBAction)sendImage {
// 判斷圖片是否存在
if (!self.showImageView.image) return;
// 拿到需要發送出去的圖片
UIImage *image = self.showImageView.image;
// 將圖片轉換成NSData類型
NSData *imgData = UIImagePNGRepresentation(image);
/**
* 發送數據給所有匹配上的用戶
*
* @param GKSendDataMode 數據發送的模式:(安全/不安全模式)
* GKSendDataUnreliable : 不安全模式:就像發10個傳單,傳單直接往人群中砸過去,能不能收到不管
* GKSendDataReliable:安全模式:就像發10個傳單,每一個傳單都得發到路人的手上,才再發下一個傳單
* @return
*/
[self.m_Session sendDataToAllPeers:imgData withDataMode:GKSendDataUnreliable error:nil];
}
設置圖片:
GameKit提供的接受數據是方法的回調
需要監聽接收傳遞過來的數據
在連接成功代理方法中設置監聽
/** 監聽傳遞過來的數據
* setDataReceiveHandler: 由哪個對象來監聽數據的接受
* withContext : 監聽需要傳遞的參數
*/
[session setDataReceiveHandler:self withContext:nil];
實現監聽方法
只設置由誰監聽傳遞過來的數據還是不足的,因為我們還是不能拿到傳遞過來的數據,進入監聽方法的頭文件可以看到
// SEL = -receiveData:fromPeer:inSession:context:
所以我們必須實現這個方法才能拿到接收到的數據,這個回調方法方法在Xcode 7之前的版本的解釋如圖:
/**
* 實現接收數據的回調方法
*
* @param data 接收到的數據
* @param peer 傳遞數據的設備ID
* @param session 當前回話
* @param context 注冊監聽傳遞過來的數據
*/
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context
{
// 判斷是否有數據進來
if (!data) return;
// 因為傳遞過來的是圖片,所以我們直接使用UIImage來接受
UIImage *image = [UIImage imageWithData:data];
// 設置圖片
self.showImageView.image = image;
}
總結
以上是生活随笔為你收集整理的iOS开发拓展篇—蓝牙之GameKit使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【概率论与数理统计】全概率公式和贝叶斯公
- 下一篇: 信用卡验证码盗刷风险 小心被“无卡支付”