日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝牙 GameKit

發布時間:2025/4/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝牙 GameKit 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.準備工作

  • 1.搭建UI?

  • 2.拖線

// 圖片 @property (weak, nonatomic) IBOutlet UIImageView *imageView; // 建立連接 - (IBAction)buildConnect:(id)sender{} // 發送數據 - (IBAction)sendData:(id)sender{}

二.連接藍牙

  • 顯示可以連接的藍牙設備列表
- (IBAction)buildConnect:(id)sender {// 創建彈窗GKPeerPickerController *ppc = [[GKPeerPickerController alloc] init];// 設置代理 @interface ViewController () <GKPeerPickerControllerDelegate>ppc.delegate = self; // 展示 [ppc show]; }
  • 監聽藍牙的連接
#pragma mark -GKPeerPickerControllerDelegate // 連接成功就會調用 - (void)peerPickerController:(GKPeerPickerController *)picker // 彈窗didConnectPeer:(NSString *)peerID // 連接到的藍牙設備號 toSession:(GKSession *)session // 連接會話(通過它進行數據交互) { NSLog(@"%s, line = %d", __FUNCTION__, __LINE__); // 彈窗消失 [picker dismiss]; }

三.利用藍牙傳輸數據

  • 點擊圖片從相冊中選擇一張顯示本機
    • 可以修改imaV為Btn,也可以為imaV添加手勢
      • 1.修改imageView的用戶交互?
      • 2.添加手勢到圖片上?
      • 3.拖出手勢的響應事件?
      • 4.完善相冊選擇圖片代碼
// 手勢-點擊從相冊中選一張照片 - (IBAction)tapImage:(UITapGestureRecognizer *)sender {NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);// 先判斷是否有相冊 if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { return; } // 創建彈出的控制器 UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; // 設置圖片來源為相冊 ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; // 設置代理 @interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate> ipc.delegate = self; // modal出來 [self presentViewController:ipc animated:YES completion:nil]; } #pragma mark - UINavigationControllerDelegate, UIImagePickerControllerDelegate // 選中某圖片后調用 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { // 控制器返回 [picker dismissViewControllerAnimated:YES completion:nil]; // 設置圖片 self.imageView.image = info[UIImagePickerControllerOriginalImage]; }
  • 點擊發送數據完成圖片顯示到另一個藍牙機器上
    • 1.分析需要通過GKSession對象來傳遞數據,所以在peerPickerController:didConnectPeer:didConnectPeer:的方法中保存session會話
@property (nonatomic, strong) GKSession *session; /**< 藍牙連接會話 */// 連接成功就會調用 - (void)peerPickerController:(GKPeerPickerController *)picker // 彈窗 didConnectPeer:(NSString *)peerID // 連接到的藍牙設備號 toSession:(GKSession *)session // 連接會話(通過它進行數據交互) { NSLog(@"%s, line = %d", __FUNCTION__, __LINE__); // 彈窗消失 [picker dismiss]; // 保存會話 self.session = session; }
  • 發送
// 發送數據 - (IBAction)sendData:(id)sender {if (self.imageView.image == nil) return; // 有圖片才繼續執行 // 通過藍牙鏈接會話發送數據到所有設備 [self.session sendDataToAllPeers:UIImagePNGRepresentation(self.imageView.image) // 數據 withDataMode:GKSendDataReliable // 枚舉:發完為止 error:nil]; }
  • 接收
// 連接成功就會調用 - (void)peerPickerController:(GKPeerPickerController *)picker // 彈窗didConnectPeer:(NSString *)peerID // 連接到的藍牙設備號 toSession:(GKSession *)session // 連接會話(通過它進行數據交互) { NSLog(@"%s, line = %d", __FUNCTION__, __LINE__); // 彈窗消失 [picker dismiss]; // 保存會話 self.session = session; // 處理接收到的數據[藍牙設備接收到數據時,就會調用 [self receiveData:fromPeer:inSession:context:]] // 設置數據接受者為:self [self.session setDataReceiveHandler:self withContext:nil]; } #pragma mark - 藍牙設備接收到數據時,就會調用 - (void)receiveData:(NSData *)data // 數據 fromPeer:(NSString *)peer // 來自哪個設備 inSession:(GKSession *)session // 連接會話 context:(void *)context { NSLog(@"%s, line = %d", __FUNCTION__, __LINE__); // 顯示 self.imageView.image = [UIImage imageWithData:data]; // 寫入相冊 UIImageWriteToSavedPhotosAlbum(self.imageView.image, nil, nil, nil); }

四.注意

  • 只能用于iOS設備之間的鏈接
  • 只能用于同一個應用程序之間的連接
  • 最好別利用藍牙發送比較大的數據
?

轉載于:https://www.cnblogs.com/XieMinQiang/p/5272429.html

總結

以上是生活随笔為你收集整理的蓝牙 GameKit的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。