zoukankan      html  css  js  c++  java
  • 【iOS】7.4 定位服务->3.4 地图框架MapKit 功能4:地图截图

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


    本文相关目录:
    ================== 所属文集:【iOS】07 设备工具 ==================
    7.4 定位服务->1.0 简介
    7.4 定位服务->2.1.1 定位 - 官方框架CoreLocation: 请求用户授权
    7.4 定位服务->2.1.2 定位 - 官方框架CoreLocation: CLLocationManager位置管理器
    7.4 定位服务->2.1.3.1 定位 - 官方框架CoreLocation 功能1:地理定位
    7.4 定位服务->2.1.3.2 定位 - 官方框架CoreLocation 功能2:地理编码和反地理编码
    7.4 定位服务->2.1.3.3 定位 - 官方框架CoreLocation 功能3:区域监听
    7.4 定位服务->2.1.4 定位 - 官方框架CoreLocation 案例:指南针效果
    7.4 定位服务->2.2 定位 - locationManager框架
    7.4 定位服务->3.1 地图框架MapKit 功能1:地图展示
    7.4 定位服务->3.2 地图框架MapKit 功能2:路线规划(导航)
    7.4 定位服务->3.3 地图框架MapKit 功能3:3D视图
    7.4 定位服务->3.4 地图框架MapKit 功能4:地图截图
    7.4 定位服务->3.5 地图框架MapKit 功能5:POI检索
    ================== 所属文集:【iOS】07 设备工具 ==================


    地图框架 - 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( 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.
        }
    }
    


    本文源码 Demo 详见 Github
    https://github.com/shorfng/iOS_7.0_Device-Tools


    作者:蓝田(Loto)
    【作品发布平台】

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

    【代码托管平台】

    Github

    【如有疑问,请通过以下方式交流】

    评论区回复
    发送邮件shorfng@126.com


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


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

    • 你也可以微信 向我打赏

  • 相关阅读:
    数据倾斜原理及解决方案
    删除emp_no重复的记录,只保留最小的id对应的记录
    理解HBase面向列存储
    给数据库用户授权(对象多为系统表,如dba可以查看的表)
    SpringBoot里的一些注解
    01背包
    【转】简说GNU, GCC and MinGW (Lu Hongling)
    费马小定理
    欧拉定理
    【转】C中的静态存储区和动态存储区
  • 原文地址:https://www.cnblogs.com/shorfng/p/6698825.html
Copyright © 2011-2022 走看看