文档章节

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

CeeYang
 CeeYang
发布于 2016/01/14 20:00
字数 1308
阅读 24
收藏 3

地图导航:

该导航不用添加 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;

}


© 著作权归作者所有

CeeYang
粉丝 7
博文 28
码字总数 26490
作品 0
深圳
程序员
私信 提问
Facebook 移除“发现附近好友”新功能

据了解,Facebook“发现附近好友”类似于国内社交应用的“摇一摇”寻找好友功能。它找出的并不是用户附近的好友,而是附近正在使用该功能的其他所有用户。这一功能只能在Facebook移动网站及其...

oschina
2012/06/26
2.4K
22
【开源已“九”,等你来摇】996 “开源已九”集字赢大奖

什么???996!!! 别怕,开源中国九周年我们要来一个爽翻天的996! 不用加班,不用写代码,不用面对产品经理…… 只需要拿起手机摇!摇!摇! 只要您是开源中国注册用户,在8月31日-9月5...

两味真火
2017/08/31
2.5K
41
记录一次移动端开发摇一摇功能所踩的坑

近日工作开发618活动,活动中有H5摇一摇功能以及声音和动画,百度瞄了几眼感觉封装的不太好,就试着自己去封装一套出来,下面记录一下这次开发做踩的坑:1、H5摇一摇功能: if (window.Devic...

沉非
2018/06/07
0
0
1024 尽情“摇”摆,High 翻全场等你来

程序员创造了世界,世界欠程序员一个1024>>> 在 1024 这个重要的日子,祝 OSCer 们节日快乐!在今天最最最重要的 10:24 以及约上了对象(“对象”)的 18:24,开源中国都善解人意地为你们准备...

达尔文
2016/10/21
19K
180
苹果发布 iOS 7.1.1 更新,改进了 Touch ID 指纹识别

苹果今天正式发布了 iOS 7.1.1,距离 iOS 7.1发布仅仅一个月。iOS 7.1包含了各种视觉元素修改,并增加了 CarPlay、增强了 Siri 并改进了 Touch ID,今天发布的 iOS 7.1.1则注重 Bug 修复。 ...

oschina
2014/04/23
2.7K
19

没有更多内容

加载失败,请刷新页面

加载更多

Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
43分钟前
4
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
2
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
3
0
Java设计模式之外观模式(门面模式)

什么是外观模式   外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口...

须臾之余
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部