IOS开发之_导航,传感器,摇一摇,蓝牙等

地图导航:

该导航不用添加 mapView,利用系统自带的地图实现导航;

/**

 *  该导航不用添加 mapView;     

 *  1.拿到用户输入的目的地;
 *  2.
地理编码;
 *  2.1
创建地理编码的实例对象;
 *  2.2
取出地理编码坐标;
 *  2.3
利用CLPlacemark来创建MKPlacemark
 *  2.4
利用MKPlacemark来创建目的地的MKMapItem
 *  2.5
拿到起点的MKMapItem
 *  3.
开始导航;
 *  3.1.
将起点和终点item放入数组中;
 *  3.2.
设置Options参数(字典);
 *  3.3.
开始导航;

 */

设置地图的导航路线,添加遮盖物overlay,

生词: direction: 方向;  calculate: 计算,计划;    response: 答复;  route: 路径;  Overlay: 遮盖物;

/**

 *  1.创建MKDirectionsRequest对象      MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
 *  1.1.
设置起点的Item :     request.source = sourceItem;
 *  1.2.
设置终点的Item :     request.destination = destinationItem;
 *  2.
创建MKDirections对象      MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
 *  3.
请求/计算(当请求到路线信息的时候会来到该方法):     [directions calculateDirectionsWithCompletionHandler:此处为 block 函数];
 *  3.1.
当有错误,或者路线数量为0直接返回:      fi (error || response.routes.count == 0 ) return;
 *  3.2.
遍历所有的路线:        for (MKRoute *route  in response.routes)
 *  3.3.
取出路线(遵守MKOverlay) :         MKPolyline *polyline = route.polyline;
 *  3.4.
将路线添加到地图上:      [self.mapView addOverlay: polyline];
 *  4
当一个遮盖添加到地图上时会执行该方法:    - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(MKPolyline *)overlay
 *  4.1
创建遮盖物实例对象;      MKPolylineRenderer *poly = [[MKPolylineRenderer alloc] initWithPolyline:overlay];
 *  4.1
设置线条颜色与宽度;    poly.strokeColor = [UIColor yellowColor];  poly.lineWidth = 5.0;

 */

传感器的实现

// 距离传感器默认是关闭(实时的检测是否有物品靠近,所有非常耗电)

    [UIDevice currentDevice].proximityMonitoringEnabled = YES;

    // 通过通知(一旦有物品靠近或者离开的时候,都会发出通知)

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(proximityStateDidChange) name:UIDeviceProximityStateDidChangeNotification object:nil];

/**
 * 
当有物品靠近或者离开的时候会调用该方法
 */

- (
void)proximityStateDidChange{
   
if ([UIDevice currentDevice].proximityState) {
       
NSLog(@"有物品靠近");
    }
else {
       
NSLog(@"有物品离开");
    }

}

摇一摇功能:

摇一摇功能与touch 的相似; 生词:      motion:运动,打手势,移动;

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

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

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

通过蓝牙彼此发送照片   GameKit

生词:  peer: 仔细看;


/**     设备查找

 *  1.创建查找设备的控制器;      GKPeerPickerController *ppc = [[GKPeerPickerController alloc] init];

 *  2.设置代理;       < UINavigationControllerDelegate,

                                   UIImagePickerControllerDelegate>

 *  3.弹出控制器;         [ppc show];

 *  4.1 设备链接成功后调用此方法:      - (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session

 *  4.2保留会话:      self.session = session;

 *  4.3设置数据的接受着:      [self.session setDataReceiveHandler:self withContext:nil];

 *  4.3退出查找设备的控制器:      [picker dismiss];

  •   选择照片

 *  1.判断照片源是否可用;     if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) return;

 *  2.创建照片选择控制器:     UIImagePickerController *ipc = [[UIImagePickerController alloc] init];

 *  3.设置照片源:     ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

 *  4.设置代理:     <GKPeerPickerControllerDelegate>

 *  5.弹出控制器:     [self presentViewController:ipc animated:YES completion:nil];

  •   发送照片

 * 0.判断image如果为空直接返回:      if (!self.imageView.image) return;

 * 1.UIImage转化成NSData:      NSData *imageData = UIImageJPEGRepresentation(self.imageView.image, 0.5);

 * 2.发送照片:        [self.session sendDataToAllPeers:imageData withDataMode:GKSendDataReliable error:nil];

  •  接受数据

 *  当接受收到数据的时候会调用该方法

 * - (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);

蓝牙的使用:      CoreBluetooth

生词:  scan:扫描;      Peripherals:外围设备;

代理: <CBCentralManagerDelegate,CBPeripheralDelegate>

Core Bluetooth的开发步骤

  • 建立中心设备

  • 扫描外设(Discover Peripheral

  • 连接外设(Connect Peripheral)

  • 扫描外设中的服务和特征(Discover Services And Characteristics)

  • 利用特征与外设做数据交互(Explore And Interact)

  • 断开连接(Disconnect)


1.扫描所有的外围设备

serviceUUIDs:可以将你想要扫描的服务的外围设备传入(nil,扫描所有的外围设备)

    [self.mgr scanForPeripheralsWithServices:nil options:nil];

#pragma mark - CBCentralManager的代理方法

 状态发生改变的时候会执行该方法(蓝牙4.0没有打开变成打开状态就会调用该方法)

- (void)centralManagerDidUpdateState:(CBCentralManager *)central{}

/**

 *  当发现外围设备的时候会调用该方法
 *
 *  @param peripheral       
发现的外围设备
 *  @param advertisementData
外围设备发出信号
 *  @param RSSI             
信号强度
 */

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{

    if (![self.peripherals containsObject:peripheral]) {
        [
self.peripherals addObject:peripheral];
    }
}

/**

 *  连接上外围设备的时候会调用该方法

 *  @param peripheral 连接上的外围设备
 */

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{

    // 1.扫描所有的服务
   
// serviceUUIDs:指定要扫描该外围设备的哪些服务(nil,扫描所有的服务)

    [peripheral discoverServices:nil];

    // 2.设置代理
    peripheral.
delegate = self;
}

#pragma mark - CBPeripheral的代理方法

 *  发现外围设备的服务会来到该方法(扫描到服务之后直接添加peripheralservices)

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{

    for (CBService *serivce in peripheral.services) {
       
if ([serivce.UUID.UUIDString isEqualToString:@"123"]) {
           
// characteristicUUIDs : 可以指定想要扫描的特征(nil,扫描所有的特征)
            [peripheral
discoverCharacteristics:nil forService:serivce];
        }
    }
}

/**

 *  当扫描到某一个服务的特征的时候会调用该方法

 *  @param service    在哪一个服务里面的特征
 */

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{

    for (CBCharacteristic *characteristic in service.characteristics) {
       
if ([characteristic.UUID.UUIDString isEqualToString:@"456"]) {

            // 拿到特征,和外围设备进行交互

        }
    }

}

#pragma mark - 连接设备

- (void)connect:(CBPeripheral *)peripheral{ //自定义的方法

    // 连接外围设备
    [
self.mgr connectPeripheral:peripheral options:nil];

}

#pragma mark - 懒加载代码

- (CBCentralManager *)mgr{

    if (_mgr == nil) {
       
_mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
    }
   
return _mgr;

}


你可能感兴趣的:(IOS开发之_导航,传感器,摇一摇,蓝牙等)