iOS开发之离线地图核心代码

一,效果图。

二,工程图。

三,代码。

ViewController.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "MapLocation.h"
@interface ViewController : UIViewController
<MKMapViewDelegate>
{
  MKMapView *_mapView;
  NSString *addressString;
}
@end 

ViewController.m

 #import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
  //调用系统自带的高德地图
  //显示当前某地的离线地图
  _mapView = [[MKMapView alloc] init];
  _mapView.frame = CGRectMake(0, 40, 320,400);
  _mapView.delegate = self;
  _mapView.mapType = MKMapTypeStandard;
  [self.view addSubview:_mapView];
  addressString=@"光启城";
  NSLog(@"---addressString---%@",addressString);
  [self geocodeQuery];
}
- (void)geocodeQuery{
  if (addressString == nil || [addressString length] == 0) {
    return;
  }
  CLGeocoder *geocoder = [[CLGeocoder alloc] init];
  [geocoder geocodeAddressString:addressString completionHandler:^(NSArray *placemarks, NSError *error) {
    NSLog(@"查询记录数:%ld",[placemarks count]);
    if ([placemarks count] > 0) {
      [_mapView removeAnnotations:_mapView.annotations];
    }
    for (int i = 0; i < [placemarks count]; i++) {
      CLPlacemark* placemark = placemarks[i];
      //调整地图位置和缩放比例
      MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate, 10000, 10000);
      [_mapView setRegion:viewRegion animated:YES];
      MapLocation *annotation = [[MapLocation alloc] init];
      annotation.streetAddress = placemark.thoroughfare;
      annotation.city = placemark.locality;
      annotation.state = placemark.administrativeArea;
      annotation.zip = placemark.postalCode;
      annotation.coordinate = placemark.location.coordinate;
      [_mapView addAnnotation:annotation];
    }
  }];
}
#pragma mark Map View Delegate Methods
- (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>) annotation {
  MKPinAnnotationView *annotationView
  = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"];
  if(annotationView == nil) {
    annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
                             reuseIdentifier:@"PIN_ANNOTATION"];
  }
  annotationView.pinColor = MKPinAnnotationColorPurple;
  annotationView.animatesDrop = YES;
  annotationView.canShowCallout = YES;
  return annotationView;
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
  _mapView.centerCoordinate = userLocation.location.coordinate;
}
- (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {
  NSLog(@"error : %@",[error description]);
}
@end 

MapLocation.h

#import <MapKit/MapKit.h>
@interface MapLocation : NSObject<MKAnnotation>
//街道信息属性
@property (nonatomic, copy) NSString *streetAddress;
//城市信息属性
@property (nonatomic, copy) NSString *city;
//州、省、市信息
@property (nonatomic, copy) NSString *state;
//邮编
@property (nonatomic, copy) NSString *zip;
//地理坐标
@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;
@end 

 MapLocation.m

//地图调用函数
#import "MapLocation.h"
@implementation MapLocation
- (NSString *)title {
  return @"您的位置!";
}
- (NSString *)subtitle {
  NSMutableString *ret = [NSMutableString new];
  if (_state)
    [ret appendString:_state];
  if (_city)
    [ret appendString:_city];
  if (_city && _state)
    [ret appendString:@", "];
  if (_streetAddress && (_city || _state || _zip))
    [ret appendString:@" • "];
  if (_streetAddress)
    [ret appendString:_streetAddress];
  if (_zip)
    [ret appendFormat:@", %@", _zip];
  return ret;
}
@end
(0)

相关推荐

  • iOS开发之离线地图核心代码

    一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import "MapLocation.h" @interface ViewController : UIViewController <MKMapViewDelegate> { MKMapView *_mapView; NSString *addres

  • iOS开发第三方键盘处理实例代码

    最近项目中遇到了键盘处理通知被调用多次的情况,废了好半天时间才找到解决办法,今天就给小伙伴儿们唠唠第三方键盘处理的那些坑! 详情请看:『https://github.com/boai/BAKeyboardDemo』 ! 1.聊天评论框的封装 先聊聊我项目中遇到的奇葩情况吧,一个直播界面,上面播放器,下面是分段控制器5个button,5个界面,其中三个界面最下面都是评论框,所以就封装了一个评论框公用. 但是本来用的『IQKeyboardManager』,开源键盘处理框架,可是在同一个界面有多个评论

  • iOS开发添加新手引导效果

    往往项目中经常出现此类需求 用户通过点击引导按钮可响应页面附带按钮的点击事件. // // gzhGuideView.h // GuideView // // Created by 郭志贺 on 2020/5/29. // Copyright © 2020 郭志贺. All rights reserved. // #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface gzhGuideView : UIView -(void)sho

  • iOS开发微信支付的方法

    本文实例为大家分享了iOS开发微信支付的具体代码,供大家参考,具体内容如下 首先我们到微信开放平台,下载相应的SDK.微信的官方文档感觉说的很简单,没有支付宝那么详细,在这里说下集成SDK到我们的工程中. 下载好demol后(最新版本SDKSample_v2.0.2_V3pay),看到有个SDKExport的文件; 你可以直接将这个文件夹添加到你的工程中,或者你自己新建一个文件夹,将里面那三个文件粘贴到你新建的文件夹中,并添加到你的工程中; 接下来就是添加相应地库文件; 我们看到demol中有个

  • iOS开发系列--地图与定位源代码详解

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

  • IOS开发之为视图绘制单(多)个圆角实例代码

    IOS开发之为视图绘制单(多)个圆角实例代码 前言: 为视图绘制圆角,圆角可以选左上角.左下角.右下角.右上角.全部圆角 //Core Raduias UIView *actionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)]; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:actionView.bounds byRoundingCo

  • IOS开发 UIAlertController详解及实例代码

     IOS开发 UIAlertController详解 在iOS 8.0后,苹果弃用了UIAlertView和UIActionSheet,转而使用UIAlertController把之前的UIAlertView和UIActionSheet整合在一起.新版的API变得简洁了不少几行代码就可实现之前一大片代码的功能 UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"My Alert" messag

  • iOS开发之隐藏导航栏线的简单代码

    去除navigationBar上那条线: ///隐藏navigationBar导航栏线(直接写在UINavigationController-viewDidLoad方法里面即可) UIView *backgroundView = [self.navigationBar subviews].firstObject; _lineView = backgroundView.subviews.firstObject; _lineView.hidden = YES; 去除前(效果图): 去除后(效果图):

  • IOS 开发之查看大图的实现代码

    IOS 开发之查看大图的实现代码 本项目是取自传智播客的教学项目,加入笔者的修改和润饰. 1. 项目名称:查看大图 2. 项目截图展示 3. 项目功能 左右滑动查看图片 支持缩放功能 点击中间按钮移动图片 4. 项目代码 #import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> @property (strong, nonatomic) IBOutlet UIScrollVie

  • iOS开发之时间戳(或date)转字符串的实例代码

    1.时间戳转字符串 ///时间戳转化为字符转0000-00-00 00:00 + (NSString *)time_timestampToString:(NSInteger)timestamp{ NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:timestamp]; NSDateFormatter *dateFormat=[[NSDateFormatter alloc]init]; [dateFormat setDate

随机推荐