iOS开发之-Core Location

57、探索iOS开发:Core Location、Map Kit与Core Motion的应用 本文介绍了在iOS开发中如何结合使用Core Location、Map Kit和Core Motion框架。通过Core Location与Map Kit的集成,可以实现地图上的位置显示和移动轨迹可视化;而Core Motion框架则用于获取设备的加速度计和陀螺仪数据,实现设备运动状态的监测。文章通过具体示例代码演示了如何构建一个能够显示位置信息和运动数据的应用,并提供了注意事项与总结,帮助开发者更好地掌握这些技术在实际开发中的应用。 阅读详情

Getting the User’s Location

Getting the User’s Current Location

The framework uses information obtained from the built-in cellular, Wi-Fi, or GPS hardware to triangulate a location fix for the device.

There are two different services you can use to get the user’s current location:

  • The standard location service is a configurable, general-purpose solution and is supported in all versions of iOS.
  • The significant-change location service offers a low-power location service for devices with cellular radios. This service is available only in iOS 4.0 and later and can also wake up an application that is suspended or not running.

Gathering location data is a power-intensive operation


Determining Whether Location Services Are Available

situations where location services may not be available:

  • The user can disable location services in the Settings application.
  • The user can deny location services for a specific application.
  • The device might be in Airplane mode and unable to power up the necessary hardware.

For these reasons, it is recommended that you always call the locationServicesEnabled class method of CLLocationManager before attempting to start either the standard or significant-change location services. If this class method returns YES, you can start location services as planned. If it returns NO and you attempt to start location services anyway, the system prompts the user to confirm whether location services should be reenabled. 


Starting the Standard Location Service

Before using this service, you configure it by specifying the desired accuracy of the location data and the distance that must be traveled before reporting a new location.

To use the standard location service, create an instance of the CLLocationManager class and configure its desiredAccuracy and distanceFilter properties. To begin receiving location notifications, assign a delegate to the object and call the startUpdatingLocation method. As location data becomes available, the location manager notifies its assigned delegate object. If a location update has already been delivered, you can also get the most recent location data directly from the CLLocationManager object without waiting for a new event to be delivered.


- (void)startStandardUpdates
{
    // Create the location manager if this object does not
    // already have one.
    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;

    // Set a movement threshold for new events.
    locationManager.distanceFilter = 500;

    [locationManager startUpdatingLocation];
}

Starting the Significant-Change Location Service

In iOS 4.0 and later, you can use the significant-change location service to receive location events. This service offers a significant power savings and provides accuracy that is good enough for most applications. It uses the device’s cellular radio to determine the user’s location and report changes in that location, allowing the system to manage power usage much more aggressively than it could otherwise. This service is also capable of waking up an application that is currently suspended or not running in order to deliver new location data.

To use the significant-change location service, create an instance of the CLLocationManager class, assign a delegate to it, and call the startMonitoringSignificantLocationChanges method. As location data becomes available, the location manager notifies its assigned delegate object. If a location update has already been delivered, you can also get the most recent location data directly from the CLLocationManager object without waiting for a new event to be delivered.


- (void)startSignificantChangeUpdates
{
    // Create the location manager if this object does not
    // already have one.
    if (nil == locationManager)
        locationManager = [[CLLocationManager alloc] init];

    locationManager.delegate = self;
    [locationManager startMonitoringSignificantLocationChanges];
}


Receiving Location Data from a Service

Whether you use the standard location service or the significant-change location service to get location events, the way you receive those events is the same. Whenever a new event is available, the location manager reports it to the locationManager:didUpdateToLocation:fromLocation: method of its delegate. If there is an error retrieving an event, the location manager calls the locationManager:didFailWithError: method of its delegate instead.

 Because the location manager object sometimes returns cached events, it is recommended that you check the timestamp of any location events you receive.


// Delegate method from the CLLocationManagerDelegate protocol.
- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
    fromLocation:(CLLocation *)oldLocation
{
    // If it's a relatively recent event, turn off updates to save power
    NSDate* eventDate = newLocation.timestamp;
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
    if (abs(howRecent) < 15.0)
    {
        NSLog(@"latitude %+.6f, longitude %+.6f\n",
                newLocation.coordinate.latitude,
                newLocation.coordinate.longitude);
    }
    // else skip the event and process the next one.
}


Monitoring Shape-Based Regions

Determining the Availability of Region Monitoring

There are several reasons why region monitoring might not be available:

  • The device may not have the hardware needed to support region monitoring.
  • The user may have disabled location services in the Settings application.
  • The device might be in Airplane mode and unable to power up the necessary hardware.

For these reasons, it is recommended that you always call the regionMonitoringAvailable and regionMonitoringEnabled class methods of CLLocationManager before attempting to monitor regions. The regionMonitoringAvailable method lets you know whether the underlying hardware supports region monitoring. If it returns NO, there is no chance that your application will ever be able to use region monitoring on the device. If region monitoring is available, the regionMonitoringEnabled method reports whether the feature is currently enabled. If region monitoring is available but not enabled when you attempt to monitor a region, the system prompts the user to confirm whether region monitoring should be reenabled. 


Defining a Region to Be Monitored

To begin monitoring a region, you must define the region and register it with the system. Regions are defined using the CLRegion class, which currently supports the creation of circular regions. Each region you create must include both the data that defines the desired geographic area and a unique identifier string. (The identifier string is required and is the only guaranteed way for your application to identify regions later.) To register a region, you call the startMonitoringForRegion:desiredAccuracy: method of your CLLocationManager object.


- (BOOL)registerRegionWithCircularOverlay:(MyCircle*)overlay andIdentifier:(NSString*)identifier
{
   // Do not create regions if support is unavailable or disabled.
   if ( ![CLLocationManager regionMonitoringAvailable] ||
        ![CLLocationManager regionMonitoringEnabled] )
      return NO;

   // If the radius is too large, registration fails automatically,
   // so clamp the radius to the max value.
   CLLocationDegrees radius = overlay.radius;
   if (radius > self.locationManager.maximumRegionMonitoringDistance)
      radius = self.locationManager.maximumRegionMonitoringDistance;

   // Create the region and start monitoring it.
   CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:overlay.coordinate
                        radius:radius identifier:identifier];
   [self.locationManager startMonitoringForRegion:region
                    desiredAccuracy:kCLLocationAccuracyHundredMeters];

   [region release];
   return YES;
}

Monitoring of a region begins immediately after registration. However, do not expect to receive an event right away. Only boundary crossings can generate an event. Thus, if at registration time the user’s location is already inside the region, the location manager does not generate an event. Instead, you must wait for the user to cross the region boundary before an event is generated and sent to the delegate.

Core Location limits the number of regions that may be simultaneously monitored by a single application. If you attempt to register a region and space is unavailable, the location manager calls the locationManager:monitoringDidFailForRegion:withError: method of its delegate with the kCLErrorRegionMonitoringFailure error code.


Handling Boundary-Crossing Events for a Region

Applications can implement the following methods to handle boundary crossings:

The system does not report boundary crossings until the boundary plus a designated cushion distance is exceeded. You specify the desired cushion distance for a region when you register it using the startMonitoringForRegion:desiredAccuracy: method. This cushion value prevents the system from generating numerous entered and exited events in quick succession while the user is traveling close the edge of the boundary.


Getting Location Events in the Background

..............

Tips for Conserving Battery Power

  • Turn off location services when you are not using them. 
  • Use the significant-change location service instead of the standard location service whenever possible. The significant-change location service provides significant power savings while still allowing you to leave location services running. This is highly recommended for applications that need to track changes in the user’s location but do not need the higher precision offered by the standard location services.
  • Use lower-resolution values for the desired accuracy unless doing so would impair your application. 
  • Turn off location events if the accuracy does not improve over a period of time. 

Getting Heading-Related Events

Heading events are available to applications running on a device that contains a magnetometer. 

Heading values can be reported relative either to magnetic north or true north on the map. Magnetic north represents the point on the Earth’s surface from which the planet’s magnetic field emanates. This location is not the same as the North Pole, which represents true north. Depending on the location of the device, magnetic north may be good enough for many purposes, but the closer to the poles you get, the less useful this value becomes.

The steps for receiving heading events are as follows:

  1. Create a CLLocationManager object.
  2. Determine whether heading events are available by calling the headingAvailable class method. 
  3. Assign a delegate to the location manager object.
  4. If you want true north values, start location services.
  5. Call the startUpdatingHeading method to begin the delivery of heading events.
- (void)startHeadingEvents {
   if (!self.locationManager) {
      CLLocationManager* theManager = [[[CLLocationManager alloc] init] autorelease];
 
      // Retain the object in a property.
      self.locationManager = theManager;
      self.locationManager.delegate = self;
   }
 
   // Start location services to get the true heading.
   locationManager.distanceFilter = 1000;
   locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
   [locManager startUpdatingLocation];
 
   // Start heading updates.
   if ([CLLocationManager headingAvailable]) {
      locManager.headingFilter = 5;
      [locManager startUpdatingHeading];
   }
}

When a new heading event arrives, the location manager object calls the locationManager:didUpdateHeading: method to deliver that event to your application. Upon receiving a new event, you should check the headingAccuracy property to ensure that the data you just received is valid


- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
   if (newHeading.headingAccuracy < 0)
      return;
 
   // Use the true heading if it is valid.
   CLLocationDirection  theHeading = ((newHeading.trueHeading > 0) ?
            newHeading.trueHeading : newHeading.magneticHeading);
 
   self.currentHeading = theHeading;
   [self updateHeadingDisplays];
}

Getting Course Information While the User Is Moving

Devices that include GPS hardware can generate information indicating the device’s current course and speed. Course information is used to indicate the direction in which the device is moving and does not necessarily reflect the orientation of the device itself. As a result, it is primarily intended for applications that provide navigation information while the user is moving.

The actual course and speed information is returned to your application in the same CLLocation objects you use to get the user’s position. When you start location updates, Core Location automatically provides course and speed information when it is available. The framework uses the incoming location events to compute the current direction of motion. 


Geocoding Location Data

About Geocoder Objects

A geocoder object uses a network service to convert between latitude and longitude values and a user-friendly placemark, which is a collection of data such as the street, city, state, and country information. Many geocoding services allow you to perform conversions in either direction but iOS currently supports only reverse geocoding, which converts a latitude and longitude into a placemark. If you want to convert placemark information into a latitude and longitude—a process known as forward geocoding—you would need to find an appropriate third-party service to use.

Here are some rules of thumb to apply when creating your requests:

  • Send at most one reverse-geocoding request for any one user action.
  • If the user performs multiple actions that involve reverse-geocoding the same location, reuse the results from the initial reverse-geocoding request instead of starting individual requests for each action.
  • When you want to update the location automatically (such as when the user is moving), reissue the reverse-geocoding request only when the user's location has moved a significant distance and after a reasonable amount of time has passed. 
  • Do not start a reverse-geocoding request at a time when the user will not see the results immediately. 


Getting Placemark Information from the Reverse Geocoder

Reverse geocoding is done using the MKReverseGeocoder class of the Map Kit framework. This class uses a delegate-based approach for geocoding a single location. This means that you can use a single instance of the MKReverseGeocoder class only once. In addition, the Google terms of service require that the MKReverseGeocoder class be used in conjunction with a Google map.

To initiate a reverse geocoding request, create an instance of the MKReverseGeocoder class, assign an appropriate object to the delegate property, and call the start method. If the query completes successfully, your delegate’s reverseGeocoder:didFindPlacemark: method is called and passed an MKPlacemark object with the results. If there is a problem reverse geocoding the location, the reverseGeocoder:didFailWithError: method is called instead.


@implementation MyGeocoderViewController (CustomGeocodingAdditions)
- (void)geocodeLocation:(CLLocation*)location forAnnotation:(MapLocation*)annotation
{
    MKReverseGeocoder* theGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate:location.coordinate];
 
    theGeocoder.delegate = self;
    [theGeocoder start];
}
 
// Delegate methods
- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFindPlacemark:(MKPlacemark*)place
{
    MapLocation*    theAnnotation = [map annotationForCoordinate:place.coordinate];
    if (!theAnnotation)
        return;
 
   // Associate the placemark with the annotation.
    theAnnotation.placemark = place;
 
    // Add a More Info button to the annotation's view.
    MKPinAnnotationView*  view = (MKPinAnnotationView*)[map viewForAnnotation:annotation];
    if (view && (view.rightCalloutAccessoryView == nil))
    {
        view.canShowCallout = YES;
        view.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    }
}
 
- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFailWithError:(NSError*)error
{
    NSLog(@"Could not retrieve the specified place information.\n");
}
@end
 
@implementation MKMapView (GeocoderAdditions)
 
- (MapLocation*)annotationForCoordinate:(CLLocationCoordinate2D)coord
{
    // Iterate through the map view's list of coordinates
    // and return the first one whose coordinate matches
    // the specified value exactly.
    id<MKAnnotation> theObj = nil;
 
    for (id obj in [self annotations])
    {
        if (([obj isKindOfClass:[MapLocation class]]))
        {
            MapLocation* anObj = (MapLocation*)obj;
 
            if ((anObj.coordinate.latitude == coord.latitude) &&
                (anObj.coordinate.longitude == coord.longitude))
            {
                theObj = anObj;
                break;
            }
        }
    }

    return theObj;
}
@end
















98、iOS 开发者必备:Core Location 使用全解析 本文详细解析了iOS开发中Core Location框架的使用方法,包括精度授权检查、位置跟踪、单次位置获取、持续后台位置跟踪、位置监控等内容。通过代码示例和配置说明,帮助开发者全面掌握Core Location的核心功能,并提供性能优化建议和常见问题解决方案,以提升应用的定位功能体验。 阅读详情

相关推荐

26、iOS开发:Core Location与Map Kit的应用指南

本文详细介绍了iOS开发中Core Location与Map Kit框架的应用,涵盖位置服务的错误处理与硬件可用性检查、地理编码与反向地理编码的实现方法、获取设备指南针航向的技术细节,并通过创建CLTest应用演示了实际开发流程。同时讲解了如何使用Map Kit集成地图、设置地图属性与初始区域、添加自定义标注及视图渲染,帮助开发者全面掌握在iOS应用中实现定位与地图功能的核心技术。

bread的博客 46

IOS开发之Core Location

IOS 支持三种检测当前位置的方式:手机基站、Wi-Fi、和GPS,其中GPS是经度最高的,同时也是最耗费手机电量的。一般情况下在室内是无法通过GPS获 取位置信息的,通过Wi-Fi获取位置的原理是通过网络提供商的IP地址信息来获取位置,经度不是很高,最后是通过手机基站获取位置,手机开机后会连接附 近的基站塔获取信号,通过基站可以得到手机所在的位置信息,基站越密集,所获取的位置信息经度就越高。

414

21、iOS开发:Core Location、MapKit与JSON数据处理

本篇博文详细介绍了在iOS开发中如何使用Core Location和MapKit框架实现地图快照的显示,通过创建单例SharedData解决数据共享问题,并修改JournalEntry类使其兼容JSON格式以实现数据的持久化存储。最终实现了应用数据的加载与保存功能,为开发具有地图功能和数据存储能力的应用(如Apple Maps或Waze)提供了实用的开发技巧。

o1p2q3r的博客 107

iOS开发之core location

ios 支持三种检测当前位置的方式:手机基站、WiFi 、和 GPS,其中GPS是经度最高的,同时也是最耗费手机电量的。一般情况下在室内是无法通过GPS获取位置信息的,通过WiFi获取位置的原理是通过网络提供商的IP地址信息来获取位置,经度不是很高,最好是通过手机基站获取位置,手机开机后连接附近的基站塔获取信号,通过基站可以得到手机所在的位置信息,基站越密集,所获取的位置信息经度就越高。

Leeyehong_self的专栏 966

18、使用Core Location和Map Kit定位并展示位置信息

本文详细介绍了如何在iOS应用中集成Core Location和Map Kit框架,实现位置更新和地图展示功能。通过设置位置管理器、处理位置更新、优化电池消耗以及提升定位精度等步骤,开发者可以轻松实现高效的位置服务功能。此外,文章还探讨了地理围栏、地理编码和路线规划等高级功能,帮助开发者进一步提升应用的功能性和用户体验。

cream的博客 207

57、利用Core Location定位:简单指南

本文详细介绍了如何使用Core Location框架在iOS应用中实现定位功能。内容涵盖Core Location基础、定位管理器的配置、精度和距离过滤器的设置、代理方法的使用以及错误处理策略。同时,文章通过一个示例应用展示了获取用户位置和计算移动距离的具体实现,并探讨了Core Location的技术细节、性能优化建议及拓展应用场景。通过本文,开发者可以快速掌握Core Location的核心知识,并将其灵活应用于实际项目中。

info6的博客 96

Step 5 Preview:600B MoE开源模型如何压低大模型推理成本

混合专家(MoE)架构正在重塑大模型的能力与成本平衡。它通过路由机制将任务分发给少量专家,使600B总参数模型每次推理只需激活约60B参数,实现参数容量与计算开销的解耦。这一原理带来直接影响:开源大模型能够在性能逼近闭源旗舰的同时,大幅降低单次推理的算力消耗;配合自部署与量化方案,企业可将复杂 agent、代码生成、数学推理等场景的单位任务成本压缩到闭源 API 的八分之一甚至更低。从硬件规划、推理框架选型到真实业务评测,理解总参数与激活参数的差异,是发挥开源模型价值、避免部署踩坑的关键。Step 5 Pr

weixin_34416649的博客 280

ArcGIS中根据DEM和地形起伏度进行地貌分类划分

大家好我是GIS蒲公英,数字高程模型(digital elevation model, DEM)经常都被用到专题地图的底图中,下面来我们来交流一下仅选择海拔和地形起伏度两个指标,用DEM来进行地貌类型的自动判别划分

GIS蒲公英的博客 3万+

iOS开发——定位 获取经纬度

最近公司提供了一个学习iOS的机会,问我是否愿意学习iOS,还是继续只做android开发。我感觉非常幸运,能有此机会去学习iOS,当即说要学习iOS开发。 学习了几天啦,做了一个小demo实现了获取经纬度,海拔,航向,及具体位置信息的功能。 iOS使用定位不像android直接指定使用gps,获取网络获取。iOS定位需要使用Core Location框架,它提供了三种技术来获取位置:GPS、

奋斗的菜鸟ing 8020

Lumerical FDTD新手必看:从零开始搭建光子晶体仿真环境(附完整脚本)

本文为Lumerical FDTD新手提供光子晶体仿真环境的完整搭建指南,涵盖从基础参数设置到脚本编写的全流程。通过典型光子晶体带隙分析案例,详细讲解结构建模、仿真参数配置及后处理技巧,并附赠完整MATLAB脚本,帮助用户快速掌握FDTD仿真核心技术。

3c4x5z6v7b的博客 1052

html python mysql交互_干货!Python与MySQL数据库的交互实战

安装PyMySQL库如果你想要使用python操作MySQL数据库,就必须先要安装pymysql库,这个库的安装很简单,直接使用pip install pymysql;假如这种方式还是安装不上,就用如下链接找一个合适的安装包,进行安装,这个就不细说了。https://www.lfd.uci.edu/~gohlke/pythonlibs/使用Python连接MySQL数据库1)六个常用的连接参数参数...

weixin_31043555的博客 1560

IOS-笔记18(Core Motion,Core Location,Map Kit)

Core Motion        使用CMMotionManager。首先检查你想用的硬件是否可用,接下来说明你要获取数据的频率,最后注册一个闭包,每次得到新值时执行。

exialym的博客 642

VS2015编译配置GDAL(图文并茂、超详细!!!)

文章目录一、GDAL介绍二、下载GDAL三、修改源代码四、工具命令提示符操作五、编译GDAL六、安装GDAL七、在VS2015的项目中配置GDAL八、添加环境变量九、测试是否配置成功 一、GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在XMIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。因此

weixin_46196863的博客 3756

Core Location定位

CoreLocation主要应用了GPS,蜂窝基站三角网以及Wi_Fi(WPS)三种技术。 使用GPS定位系统,可以精确地定位你当前所在的地理位置,但由于GPS接收机需要对准天空才能工作,因此在室内环境基本无用。 另一个找到自己所在位置的有效方法是使用手机基站,手机开机时,它会与周围的基站保持联系,如果你知道这些基站的身份,就可以使用各种数据库(包含基站的身份和它们的确...

diaoguan9600的博客 219

FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例

上一篇文章种总结了MultiBoot 关键技术,分为:一个指令、二种位流、三种方式、四样错误。针对以上四句话我们接下来详细分析。在开始解析之前我们先准备两个文件,一个是控制LED闪烁的文件,通过更换引脚约束可以控制不同LED,这样就可以指示是启动MultiBoot位流还是Golden位流。还有一个文件就是uart发送文件,会指示启动的位流格式和启动地址。文件都比较简单,就不列举了,文件详见文后的链接。对于 IPROG 指令目前有三种实现方式,分别为:1)通过约束脚本添加;2)通过ICAPE2原语

OpenFPGA的博客 2104

Hermes Agent 常见报错排查与问题解决

Hermes Agent 常见报错排查指南 摘要 本文全面梳理了 Hermes Agent 使用过程中的10类常见报错,按阶段划分为安装期、运行期认证类、后端基础设施类和长任务执行类四大类,并提供了系统化的排查流程: 安装期问题:包括命令未找到和Python版本不兼容,主要检查PATH环境和Python版本是否符合要求 认证类问题:涉及API Key认证失败和速率限制,需要验证密钥配置和配额状态 基础设施问题:包含Docker报错、MCP连接失败和OAuth令牌过期,需检查相关服务状态 执行类问题:主要是上

简简单单Onlinezuozuo 1345

浅谈iOS开发过程中的Core Location &Map Kit

  两个月前,抱着对iOS开发的兴趣开始接触苹果设备的开发,开始接触object -C,以后用OC来代替,本人新人一枚,以后会经常写一些东西给大家分享,有做的不到位的,请大家多多包涵。今天是我发表的第一篇博客。有什么错误的或者是写的不到位的情况。请大家指正,大家共同进步。今天呢我来介绍一些关于iOS开发过程中的地图类。   OC是面向对象的语言,和我们接触的C++,JAVA是一样的。在OC中除...

weixin_30721899的博客 131

RK3568 RGA硬件加速详解:图像缩放、旋转、格式转换10倍提速

RGA(Raster Graphics Acceleration)是瑞芯微(Rockchip)芯片系列中的 2D 图形加速引擎,专门用于处理像素级的图像操作。它通过硬件实现常见的图像处理算法,解放 CPU,降低功耗。RGA 是 RK3568 平台上一颗强大的 2D 图形加速引擎,能够:✅10-20 倍性能提升:大幅减少图像处理时间✅降低 CPU 占用:释放 CPU 资源给其他任务✅丰富的功能:缩放、旋转、裁剪、格式转换一应俱全✅易于集成:librga 提供简洁的 C API。

小灰灰的博客 1694

精通iOS开发--第19章 Core Location 和 Map Kit 上

第19章 Core Location 和 Map Kit 上 位置管理器、设置精度、设置距离筛选器、启动位置管理器、合理使用位置管理器、位置管理器委托、获取位置更新、使用CLLocation获取经度纬度、错误通知、开始构建Core Location、将移动路线展现在地图上、小结 前言:     CoreLocation框架决定他的物理位置。Map Kit

静静燃烧的雪的专栏 684

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

iOS开发-Core Location和Map Kit

一、Core Location确定物理位置 利用以下3种技术: 1、GPS(最精确的) 2、蜂窝基站ID定位(cell ID Location) 3、WPS(Wi-Fi Positioning Service,Wi-Fi定位服务) 这3种方法都很耗电,使用Core Location时要注意这一点,尽量只在必要时进行定位。使用时,我们可以根据需要指定精度。注意,在指定绝对最低精度级别...

weixin_34362875的博客 175

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: iOS开发之-Concurrency Programming Guide - Dispatch Queues
下一篇: iOS开发之-Map
nerohoop
博客等级 码龄16年 42粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值