您的位置:首页 > 移动开发 > IOS开发

【iOS】7.4 定位服务->3.4 地图框架MapKit 功能4:地图截图

2017-04-12 13:46 856 查看

本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。





地图框架 - MapKit目录:



本文目录:



步骤1:创建截图附加选项(略)
步骤2:设置截图附加选项



步骤3:创建截图对象



步骤4:开始截图



代码20:地图截图 Demo
编译环境:Xcode 8.0

模拟器版本:iOS 10

Swift版本:3.0

【OC 语言】
#import "ViewController.h"
#import <MapKit/MapKit.h>

@interface ViewController ()
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

// 1. 创建截图附加选项 - option
MKMapSnapshotOptions *option = [[MKMapSnapshotOptions alloc] init];

// 2. 设置截图附加选项 - option
option.mapRect = self.mapView.visibleMapRect; // 设置地图区域
option.region = self.mapView.region;  // 设置截图区域(在地图上的区域,作用在地图)
option.mapType = MKMapTypeStandard;   // 截图的地图类型
option.showsPointsOfInterest = YES;   // 是否显示POI
option.showsBuildings = YES;          // 是否显示建筑物
option.size = self.mapView.frame.size;         // 设置截图后的图片大小(作用在输出图像)
option.scale = [[UIScreen mainScreen] scale];  // 设置截图后的图片比例(默认是屏幕比例, 作用在输出图像)

// 3. 创建截图对象
MKMapSnapshotter *snapShoter = [[MKMapSnapshotter alloc] initWithOptions:option];

// 4. 开始截图
[snapShoter startWithCompletionHandler:^(MKMapSnapshot * _Nullable snapshot, NSError * _Nullable error) {

if (error == nil) {
// 获取到截图图像
UIImage *image = snapshot.image;
// 将截图转换成为NSData数据
NSData *data = UIImagePNGRepresentation(image);
// 将图像保存到指定路径
[data writeToFile:@"/Users/TD/Desktop/test.png" atomically:YES];
}else{
NSLog(@"截图错误:%@",error.localizedDescription);
}
}];
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

【Swift 语言】
import UIKit
import MapKit

class ViewController: UIViewController {

@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
super.viewDidLoad()
}

// MARK: - 地图截图

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// 1. 创建截图附加选项 - option
let option: MKMapSnapshotOptions = MKMapSnapshotOptions()

// 2. 设置截图附加选项 - option
option.mapRect = mapView.visibleMapRect  // 设置地图区域
option.region = mapView.region       // 设置截图区域(在地图上的区域,作用在地图)
option.mapType = .standard           // 截图的地图类型
option.showsPointsOfInterest = true  // 是否显示POI
option.showsBuildings = true         // 是否显示建筑物
// option.size = CGSize(width: 100, height: 100)// 设置截图后的图片大小(作用在输出图像)
option.size = self.mapView.frame.size    // 设置截图后的图片大小(作用在输出图像)
option.scale = UIScreen.main.scale       // 设置截图后的图片比例(默认是屏幕比例, 作用在输出图像)

// 3. 创建截图对象
let snapShoter = MKMapSnapshotter(options: option)

// 4. 开始截图
snapShoter.start { (shot:MKMapSnapshot?, error:Error?) in

if error == nil {
// 获取到截图图像
let image = shot?.image
// 将截图转换成为NSData数据
let data = UIImagePNGRepresentation(image!)
// 将图像保存到指定路径
try? data?.write(to: URL(fileURLWithPath: "/Users/TD/Desktop/test.png"), options: [.atomic])
}else {
print("截图错误")
}
}
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}






作者:蓝田(Loto)

【作品发布平台】
简书

博客园

Gitbook(如果觉得文章太长,请阅读此平台发布的文章)

【代码托管平台】
Github

【如有疑问,请通过以下方式交流】
评论区回复


发送邮件
shorfng@126.com

本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

支付宝扫一扫 向我打赏



你也可以微信 向我打赏

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐