2017-11-17 14:54:04 u011374880 阅读数 2355
LIVE拍摄的原图发送无法显示解决办法

iOS 11中,如果你是iPhone 7及以上设备,系统用了新的格式来存储视频和图片,


如果你的App支持上传图片原文件,那么很可能会有图片无法显示的问题。

读取图片原文件的代码一般是下面这样的,传到后台之后得到一个url,webview和UIImage是无法显示的。

[[PHImageManager defaultManager] requestImageDataForAsset:phAsset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
    if (imageData) {
        
    }
}];
当我们讲适配的时候,往往比较多地关注UI的适配,容易忽略一些看不见的东西。
识别HEIF
识别HEIF文件的方法和识别GIF一样,对比文件UTI(uniformTypeIdentifier)
__block BOOL isHEIF = NO;
if (iOSVersionGreaterThanOrEqualTo(@"9.0")) {
    NSArray *resourceList = [PHAssetResource assetResourcesForAsset:phAsset];
    [resourceList enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        PHAssetResource *resource = obj;
        NSString *UTI = resource.uniformTypeIdentifier;
        if ([UTI isEqualToString:@"public.heif"] || [UTI isEqualToString:@"public.heic"]) {
            isHEIF = YES;
            *stop = YES;
        }
    }];
} else {
    NSString *UTI = [phAsset valueForKey:@"uniformTypeIdentifier"];
    isHEIF = [UTI isEqualToString:@"public.heif"] || [UTI isEqualToString:@"public.heic"];
}
下面这个方法不准确
[[PHImageManager defaultManager] requestImageDataForAsset:phAsset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
    //这个dataUTI只是根据文件扩展名传过来的,不准确
}];
转换
方法一:有损
既然我们可以前置识别了,那么针对HEIF可以选择通过requestImageDataForAsset:phAsset获取到UIImage,再用UIImageJPEGRepresentation转为NSData,不过转为UIImage之后,图片的其他信息(Exif、GPS等)就丢失了。
方法二:无损
[[PHImageManager defaultManager] requestImageDataForAsset:phAsset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
    if (isHEIF) {
        CIImage *ciImage = [CIImage imageWithData:imageData];
        CIContext *context = [CIContext context];
        NSData *jpgData = [context JPEGRepresentationOfImage:ciImage colorSpace:ciImage.colorSpace options:@{}];
    } else {
    }
}];
方法三:无损
if (isHEIF) {
    [phAsset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) {
        if (contentEditingInput.fullSizeImageURL) {
            CIImage *ciImage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];
            CIContext *context = [CIContext context];
            NSData *jpgData = [context JPEGRepresentationOfImage:ciImage colorSpace:ciImage.colorSpace options:@{}];
        }
    }];
}
UIImage加载HEIF
CIImage *ciImage = [CIImage imageWithContentsOfURL:url];
imageView.image = [UIImage imageWithCIImage:ciImage];
这个方法有点慢,也可以使用CGImageSourceCreateWithURL和CGImageSourceCreateImageAtIndex加载
2016-02-29 11:05:51 FTD1120 阅读数 2451

一. CoreLocation

实现一次定位

  1. 创建CLLocationManager对象
  2. 请求用户授权 –> 从iOS8开始, 必须在程序中请求用户授权, 除了写代码, 还要配置plist’列表的键值
  3. 设置代理 –> 获取用户位置
  4. 调用开始定位方法
  5. 代理方法中停止定位

2. 实现持续定位

  1. 距离筛选器 –> 位置发生了一定的改变之后, 才去调用代理方法 降低方法的调用来达到省电的目的
  2. 定位精准度 –> 降低通讯及计算的过程就可以省电

3. CLLocation对象介绍

  1. 位置对象, 最核心的就是经纬度, coordinate : 2D位置坐标 –> 经纬度
  2. 创建一个位置对象, 最少只需要两个值, 经纬度
  3. 比较两个位置之间的距离: distanceFromLocation , 返回的是直线距离

4. 请求用户授权

  1. 如果要授权, 从iOS8开始, 必须在程序中请求用户授权, 除了写代码, 还要配置plist列表的键值
  2. 授权方式 –>requestWhenInUseAuthorization 当用户使用的使用授权
    –>requestAlwaysAuthorization 永久授权方法
  3. 一定要记得授权方法和plist列表匹配 (when / always)
    NSLocationWhenInUseUsageDescription
    NSLocationAlwaysUsageDescription

  4. 如果2个方法都写, 会出现2此授权的情况 (第一次会走第一个方法, 第二次会走第二个方法 –> 一般使用1个方法即可

  5. 大部分的程序之使用 “使用期间” 这个授权即可. 如果说列表出出现了3个, 说明两个授权方法写了

  6. plist的Value 可以不写, 写上是为了提示用户, 当前程序会在哪些地方使用定位. 建议写上, 提高用户打开的几率

5. iOS9新特性-临时获取后台定位权限

使用场景:当程序使用 “requestWhenInUseAuthorization” , 如果想要临时开启后台定位, 那么才需要使用新增的属性
1. allowsBackgroundLocationUpdates: 设置为YES即可, 还要配置plist列表 Required background modes : App registers for location updates

二. Geocoder

1. 正地理编码

正地理编码: 将地名 转换成 经纬度 的过程
1. 创建一个CLGeocoder对象
2. 实现地理编码方法
3. 遍历数组, 获取数据
注意: 地理编码 可能出现重名的问题, 所以将来如果对标对象大于1, 应该给用户一个列表选择

2. 反地理编码

反地理编码: 将经纬度 转换成 地名 的过程
1. 创建一个CLGeocoder对象
2. 创建一个CLLoction对象
3. 实现反地理编码方法
4. 遍历数组, 获取数据

三. MapView的基本使用

1. 显示用户位置

  1. CLLocationManager授权
  2. userTrackingMode: 设置跟踪模式

2. 设置地图显示类型

  1. mapType : 设置地图类型 , 一般要使用默认, 要么使用混合, 单纯的卫星图没有意义.

3. 根据用户位置显示对应的大头针信息

  1. 请参照反地理编码知识来设置userLocation 的相关属性即可

4. 设置以用户所在位置为中心点

  1. 设置中心点坐标: centerCoordinate
  2. 设置范围的属性: region 可以改变坐标, 也可以改变显示跨度
  3. 如果想要变化时有动画: 调用set方法, 增加动画

5. 获取地图显示区域改变时的中心点坐标及显示跨度

实现放大和缩小地图的效果
1. Delta 跨度倍数处理
2. 重设region属性

6. iOS9新特性-显示交通状况 / 显示比例 / 显示指南针

  1. 设置交通状况
  2. 设置指南针(默认就是YES)
  3. 设置比例尺

四. 大头针的使用

1. 添加大头针

  1. 添加大头针 –> 需要自定义大头针模型类
    1. 导入框架 MapKit
    2. 遵守协议 MKAnnotation
    3. 设置属性 直接去协议中拷贝–>删掉readonly
  2. 创建大头针
  3. 添加到地图上

2. 自定义大头针

a. 更改颜色, 设置掉落效果
  1. 如果发现是显示用户位置的大头针模型, 就返回nil
  2. 自定义大头针View –> 跟Cell的创建几乎一样
    —需要使用一个子类: MKPinAnnotationView : 子类是默认有View的–
  3. 设置颜色
  4. 设置动画掉落
b.更改大头针的图像
设置图像
  1. 修改模型类, 增加属性
  2. 在创建模型类的时候, 去设置相关属性icon
  3. 在自定义大头针View的方法中设置图像 –> MVC
动画掉落
  1. 处理显示用户位置的大头针View, 不要增加动画
  2. 记录原本的位置
  3. 将View的Y值改为0, 重设Frame
  4. 将位置还原, 执行动画效果

4. 自定义大头针的代码封装

额外属性介绍
  1. 设置可以点击呼唤出来之前设置的标题子标题
  2. 设置左边 / 右边 / 详情 附属视图
封装大头针
  1. 封装大头针View, –> 跟封装cell的过程几乎一样, 唯一一个地方不一样的是, 可以不用设置模型属型

2.系统会自动调用该方法 annotation 的 set方法
1. 必须调用父类方法
2. 设置图像

最近才开始往github上放东西 在公司写的又不能放= = 大家姑且看看吧

github地址: https://github.com/FuThD

2015-08-21 12:33:56 u014406672 阅读数 1559

开发环境:Xcode6.4

模拟器  : IOS8.4

OS X : 10.0.4

小编博客链接: http://www.goofyy.com

首先例子是小编写的一个定位获取经纬度,然后在地图上面显示,并自定义大头针的一个程序。先上图


首先说一下定位,在 iOS 8 之前,位置服务的权限是二元的:你要么赋予一个应用得到使用位置服务的权限,要么不给。你可以在 Settings.app 查看哪些 app 可以在后台取得你的位置信息,但除了完全不让这个 app 使用位置服务之外,你不能做任何的事来阻止它获取位置信息,但是在IOS8之后, 修改了这个问题,ISO8把应用程序分成两个权限,

“使用期间”  正如标题,程序在使用期间会获取你的位置信息。
“始终”   这个就跟IOS8之前一样,会在程序中一直获取你的个人信息。


所以我们在使用地图的时候,要在Info.plist里面添加两行文字,设置我们程序使用地图的权限。

Screen Shot 2015-08-18 at 5.27.16 PM

NSLocationWhenInUseUsageDescription  //用的时候获取位置

NSLocationAlwaysUsageDescription    //始终获取用户位置

后面的value 可填写或不填写。value是在获取用户定位允许的弹窗信息。如果没有这两行东东,那么程序不会提醒用户获取定位允许,那么你的程序也一直没办法获取定位。明白了之后,就开始写程序吧。


首先就是先把CoreLocation框架引入过来。直接晒代码吧。懒得写了。代码下面注释

//
//  ViewController.swift
//  获取路线
//
//  Created by goofygao on 8/18/15.
//  Copyright (c) 2015 goofyy. All rights reserved.
//

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController,MKMapViewDelegate,CLLocationManagerDelegate {
    @IBOutlet weak var mapView: MKMapView!
    var locationManger:CLLocationManager = CLLocationManager()
    var location:CLLocation!
    var ann:MKPointAnnotation = MKPointAnnotation()
    override func viewDidLoad() {
        super.viewDidLoad()
        
        locationManger.delegate = self
        locationManger.desiredAccuracy = kCLLocationAccuracyBest
        locationManger.distanceFilter = kCLLocationAccuracyKilometer
        
        locationManger.requestAlwaysAuthorization()
        locationManger.startUpdatingLocation()
        
        mapView.delegate = self
        mapView.mapType = MKMapType.Satellite
        
        ann.title = "定位的位置"
        ann.subtitle = "广州"
        
        mapView.addAnnotation(ann)
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    /**
    
    重写 - 更改大头针颜色
    :param: mapView
    :param: annotation
    
    :returns: MKAnnotationView
    */
    func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!
    {
        var view:MKPinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
        view.pinColor = MKPinAnnotationColor.Red
        //view.image = UIImage(named: "localtion.png")
        var viewLeft = UIView(frame: CGRectMake(0, 0, 50, 50))
        viewLeft.backgroundColor = UIColor.redColor()
        var viewRight = UIView(frame: CGRectMake(0, 0, 50, 50))
        viewRight.backgroundColor = UIColor.greenColor()
        view.leftCalloutAccessoryView = viewLeft
        view.rightCalloutAccessoryView = viewRight
        view.draggable = true
        view.canShowCallout = true
        return view
    }
    
   
    
    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
        location = locations.last as! CLLocation
        if((location) == nil) {
            locationManger.startUpdatingLocation()
        }
        println("\(location.coordinate.longitude)")
        mapView.region = MKCoordinateRegion(center: CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude), span: MKCoordinateSpanMake(20, 20))
        ann.coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
    }

}

分开来说,首先是定位的问题。添加CLLocationManagerDelegate代理,实现代理的方法

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { }


这个方法是在获取到手机的位置的时候调用。


        locationManger.delegate = self
        locationManger.desiredAccuracy = kCLLocationAccuracyBest
        locationManger.distanceFilter = kCLLocationAccuracyKilometer
        
        locationManger.requestAlwaysAuthorization()
        locationManger.startUpdatingLocation()

设置代理为当前,设置定位的精度和开始定位。


然后到了设置地图地方了。添加地图的代理,设置大头针的主标题和副标题。

mapView.delegate = self
        mapView.mapType = MKMapType.Satellite
        
        ann.title = "定位的位置"
        ann.subtitle = "广州"
        
        mapView.addAnnotation(ann)


大头针的默认显示颜色为红色。然后我们可以重写一下大头针的方法,来重绘一下大头针


func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!
    {
        var view:MKPinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
        view.pinColor = MKPinAnnotationColor.Red
        //view.image = UIImage(named: "localtion.png")
        var viewLeft = UIView(frame: CGRectMake(0, 0, 50, 50))
        viewLeft.backgroundColor = UIColor.redColor()
        var viewRight = UIView(frame: CGRectMake(0, 0, 50, 50))
        viewRight.backgroundColor = UIColor.greenColor()
        view.leftCalloutAccessoryView = viewLeft
        view.rightCalloutAccessoryView = viewRight
        view.draggable = true
        view.canShowCallout = true
        return view
    }


设置大头针和地图定位的经纬度,因为经纬度是在CLLocationManagerDelegate协议的实现方法中获取到,所以我们在它的协议方法里使用。


location = locations.last as! CLLocation
        if((location) == nil) {
            locationManger.startUpdatingLocation()
        }
        println("\(location.coordinate.longitude)")
        mapView.region = MKCoordinateRegion(center: CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude), span: MKCoordinateSpanMake(20, 20))
        ann.coordinate = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
    }

设置了大头针的经纬度和定位的经纬度,和地图显示的范围。

然后看下一个。

地图覆盖层


简单来说就是在地图地图上面画图。

首先是在地图上面画线

        var coor = [CLLocationCoordinate2D]()
        for (var i=0; i<5; i++) {
         po = CLLocationCoordinate2DMake(CLLocationDegrees(23 + i), 113)
            coor.append(po)
        }
        var line = MKPolyline(coordinates: &coor, count: 5)
        mapView.addOverlay(line)


这里有一个犯错点,var line =MKPolyline(coordinates: &coor, count:5)  。

 MKPolyline(coordinates: <#UnsafeMutablePointer<CLLocationCoordinate2D>#>, count: <#Int#>)


不少人并不知道<#UnsafeMutablePointer<CLLocationCoordinate2D>#>这货是什么卵类型。说白了就是一个指针。从oc过来的大部分人都应该知道,因为oc在存储上面for循环生成的几个经纬度的时候,通常采用的是申请一部分内存,然后放进去。采用了C的语法。so下面直接引用了指针。指向存储经纬度空间的内存。这里也就是这个数组的地址。加个“&”即可。


然后添加 MKMapViewDelegate 代理,实现代理的方法。

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
        var render = MKPolylineRenderer(overlay: overlay)
        render.lineWidth = 3
        render.strokeColor = UIColor.redColor()
        return render
        
    }


这里会自动调用代理的方法。搞到这里的时候,运行,一条直线也就出来了。下面是两个项目的工程,放在了github上


完整项目 https://github.com/goooooooofy/originMapApple.git




2017-10-27 14:47:26 u014621518 阅读数 2237

iOS 11开发教程(八)定制iOS11应用程序图标

在图1.9中可以看到应用程序的图标是网状白色图像,它是iOS模拟器上的应用程序默认的图标。这个图标是可以进行改变的。以下就来实现在iOS模拟器上将HelloWorld应用程序的图标进行更改。

(1)添加图像logo.png到创建的项目中,添加图像的具体步骤如下。首先右击项目文件夹中的任意位置,弹出快捷菜单,如图1.34所示。


图1.34  快捷菜单

然后,选择Add Files to "HelloWorld"…命令,弹出选择文件对话框,如图1.35所示。


图1.35  选择文件对话框

最后,选择需要添加的图像,单击Add按钮,实现图像的添加。添加后的图像就会显示在项目文件夹中。

注意:除了上面介绍的添加图像的方法外,还有一种拖动的方法。具体步骤如下:

打开HelloWorld项目和logo.png所在的文件夹,如图1.36所示。


图1.36  打开文件夹

然后,拖动logo.png图像到HelloWorld项目的项目文件夹中,松开鼠标,弹出Choose options for adding these files:对话框,如图1.37所示。


图1.37  Choose options for adding these files:对话框

最后,单击Finish按钮,图像logo.png就被添加到HelloWorld项目的项目文件夹中了。

注意:iOS 11的图标尺寸必须是120*120像素的。

(2)单击打开项目文件夹中的Info.plist文件,在其中添加一项Icon files,在其下拉菜单的Value中输入添加到项目文件夹中的图片,如图1.38所示。


图1.38  Info.plist文件

此时运行程序,在返回iOS模拟器的主界面后,会看到如图1.39所示的效果。


图1.39  运行效果

2018-04-25 22:19:42 u010417491 阅读数 231

在IOS开发中,最常见的功能之一就是地图定位功能,不单单是百度地图,高德地图等专业的地图导航软件,还有美团,咕咚等一些美食购物类和运动类也需要这样的功能,所以学会这项技能是一名IOS开发工程师必须的。

百度地图
咕咚
�美团
分享一些比较基础的关于定位方面的小知识.

关于定位有两个框架
1.CoreLocation ---->用于地理定位
2.Map Kit ---->用于地图展示

两个热词:

LBS: location based service
SLM: social local mobile

使用CoreLocation定位

首先在之前需要导入corelocation框架,然后在头文件导入corelocation.h头文件.
注意:coordinate是坐标,latitude是纬度,longitude是经度.

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 1.创建位置管理者
    CLLocationManager *locationManager = [[CLLocationManager alloc] init];
    self.locationManager = locationManager;
    // 在iO8之前,只要导入CoreLocation 会自动申请权限
    // 在iOS8之后需要程序员手写
    
    // 2.请求用户授权    必须要配置info.plist文件
    //在info里面配置NSLocationAlwaysUsageDescription或者
    //NSLocationWhenInUseUsageDescription
    // 请求app始终授权  无论程序在前台还是在后台运行  都可以使用定位
//    [locationManager requestAlwaysAuthorization];
    // 请求app在使用期间授权   在前台使用时才可以使用定位
    [locationManager requestWhenInUseAuthorization];
    
    if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) {
        // 临时开启后台定位  配置info.plist文件  不配置直接崩溃
        locationManager.allowsBackgroundLocationUpdates = YES;
    }
    // 3.设置属性(两个属性是为了让程序可以持续的进行定位)
//    // 距离筛选  单位:米  当用户移动100.5米后调用定位方法
//    locationManager.distanceFilter = 100.5;
//    // 期望精度  单位:米  系统默认将100米范围内作为一个位置
//    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    // 4.设置代理
    locationManager.delegate = self;
    // 5.开启定位
    [locationManager startUpdatingLocation];
    // 开始更新移动方向
//    [locationManager startUpdatingHeading];


//代理方法,一旦开启定位,会自动调用这个代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
    // 获取数据
//    NSLog(@"%@",locations);
    // 停止定位  省电
//    [manager stopUpdatingLocation];
}



// 比较位置的距离  比较的是两点之间的直线距离
- (void)compareDistance
{
    // 北京的位置
    CLLocation *location = [[CLLocation alloc] initWithLatitude:39 longitude:115];
    // 上海的位置
    CLLocation *location1 = [[CLLocation alloc] initWithLatitude:30 longitude:120];
    // 比较北京到上海的位置(直线距离)
    double distance = [location distanceFromLocation:location1];
    // 单位:米
    NSLog(@"%f",distance / 1000);
}
    
使用MapKit定位

修改地图类型 mapView.mapType
地图实时交通状态 mapView.showsTraffic
设置用户跟踪模式 mapView.userTrackingMode
代理方法,
//显示在地图中用户定位的位置

-(void)mapView:(MKMapView\*)mapView didUpdateUserLocation:(MKUserLocation \*)userLocation

//获取实时地图变化的区域变化(中心点,区域跨度)

-(void)mapView:(MKMapView \*)mapView regionDidChangeAnimated:(BOOL)animated

注意:这里需要导入的是MapKit框架和MapKit.h头文件.

- (void)viewDidLoad {
    [super viewDidLoad];
     
    // 修改地图类型
    /*
     MKMapTypeStandard    标准(默认)
     MKMapTypeSatellite   卫星
     MKMapTypeHybrid      混合
     MKMapTypeSatelliteFlyover  在中国暂时不能使用
     MKMapTypeHybridFlyover  在中国暂时不能使用
     */
    self.mapView.mapType = MKMapTypeStandard;
    
    // 实时交通状况 iOS9新增
    self.mapView.showsTraffic = YES;
    
    // 创建位置管理者
    self.locationManager = [[CLLocationManager alloc] init];
    // 请求用户授权  配置info.plist
    [self.locationManager requestWhenInUseAuthorization];
    // 设置用户的跟踪模式
    /*
     MKUserTrackingModeFollow  跟踪用户的位置   MKUserTrackingModeFollowWithHeading  跟踪用户的位置和方向
     */
    self.mapView.userTrackingMode = MKUserTrackingModeFollow;
    
    // 设置代理
    self.mapView.delegate = self;
}

// 跟踪到用户位置时调用
// mapView:地图
// userLocation:用户位置的大头针模型
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    // 1.反地理编码
    // 1.1创建地理编码对象
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    // 1.2反地理编码
    [geocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        // 1.3防错处理
        if (error) {
            NSLog(@"%@",error);
            return ;
        }
        // 1.4获取地标
        CLPlacemark *placemark = [placemarks firstObject];
        // 2.给标题和子标题赋值
        userLocation.title = placemark.locality;
        userLocation.subtitle = placemark.name;
    }];
}


// 回到当前用户的位置
- (IBAction)backToCurrentLocation
{
    
    // 获取当前的跨度
    MKCoordinateSpan span = MKCoordinateSpanMake(0.024967, 0.015407);
    // 设置回到用户刚开始的区域 region(结构体) --1.中心点经纬度(结构体)--> 经度和纬度  2.经纬度跨度(结构体)-->经度跨度和纬度跨度
    // 设置区域并使用动画
    [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.userLocation.location.coordinate, span) animated:YES];
}


- (IBAction)biggerMap
{
    // 修改经纬度跨度
    CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 0.5;
    CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 0.5;
    MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
    // 确定放大地图后的区域
    [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:YES];
}
- (IBAction)smallerMap
{
    // 修改经纬度跨度
    CGFloat latitudeDelta = self.mapView.region.span.latitudeDelta * 2;
    CGFloat longitudeDelta = self.mapView.region.span.longitudeDelta * 2;
    MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
    [self.mapView setRegion:MKCoordinateRegionMake(self.mapView.centerCoordinate, span) animated:YES];
}

演示

效果演示

说到底,其实苹果官方的框架已经做得不错了,该有的功能基本都具备,而且使用起来不是怎么困难,掌握起来也非常快.我这里只是分享一些比较基础的功能,欢迎工程师们赐教.
另外附上地理编码的小演示.

地理编码.gif

iOS_系统原生分享

阅读数 6114

没有更多推荐了,返回首页