MapKit --- iOS中的地图框架 - iPhone手机开发技术文章

#import "ViewController.h"
#import <MapKit/MapKit.h>
@interface ViewController ()<MKMapViewDelegate>
{
    MKMapView *mapView;
    CLGeocoder *geocoder;
}
@end
@implementation ViewController
-(void)viewDidAppear:(BOOL)animated

{
    UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:@"是否开启定位" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
    [alter show];
}
- (void)viewDidLoad {
    [super viewDidLoad];

    
    
    mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    
    mapView.zoomEnabled = 1;
    mapView.scrollEnabled = 1;
    mapView.rotateEnabled = 1;
    mapView.mapType = MKMapTypeStandard;
    mapView.delegate = self;
    [self.view addSubview:mapView];

   
    UILongPressGestureRecognizer *longP = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(PressG:)];
    [self.view addGestureRecognizer:longP];

    
    geocoder = [[CLGeocoder alloc] init];
    [self locationLatitude:23 and:112];

}
- (void)locationLatitude:(CGFloat)latitude and:(CGFloat)longitude
{
    CLLocationCoordinate2D center = {latitude, longitude};
    
    MKCoordinateSpan span;
    span.latitudeDelta = 0.05;
    span.longitudeDelta = 0.05;

    
    MKCoordinateRegion region = {center, span};
    
    [mapView setRegion:region animated:1];
    
    MKPointAnnotation *ann = [[MKPointAnnotation alloc] init];
    ann.title = @"广东";
    ann.subtitle = @"福地";
    ann.coordinate = center;

    
    [mapView addAnnotation:ann];
    
}
- (void)PressG:(UILongPressGestureRecognizer *)sender
{CGPoint pos = [sender locationInView:mapView];
    // 将长按点的坐标转换为经度、维度值
    CLLocationCoordinate2D center = [mapView convertPoint:pos toCoordinateFromView:mapView];
    // 将经度、维度值包装为CLLocation对象
    CLLocation *location = [[CLLocation alloc] initWithLatitude:center.latitude longitude:center.longitude];
    // 根据经、纬度反向解析地址
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        if ( error == nil)

        {
            // 获取解析得到的第一个地址信息
            CLPlacemark* placemark = [placemarks objectAtIndex:0];
            // 获取地址信息中的FormattedAddressLines对应的详细地址
            NSArray* addrArray = placemark
            .addressDictionary[@"FormattedAddressLines"];
            // 将详细地址拼接成一个字符串
            NSMutableString* address = [[NSMutableString alloc] init];
            for(int i = 0 ; i < addrArray.count ; i ++)

            {
                [address appendString:addrArray[i]];
            }
            // 创建MKPointAnnotation对象——代表一个锚点
            MKPointAnnotation  *annotation = [[MKPointAnnotation alloc] init];

            
            annotation.title = placemark.name;
            annotation.subtitle = address;
            annotation.coordinate = center;

            
            // 添加锚点
            [mapView addAnnotation:annotation];

        }
    }];
}
- (MKAnnotationView *) mapView:(MKMapView *)mmapView
             viewForAnnotation:(id <MKAnnotation>) annotation

{
    static NSString* annoId = @"fkAnno";
    
    
    // 获取可重用的锚点控件
    MKAnnotationView* annoView = [mmapView
                                  dequeueReusableAnnotationViewWithIdentifier:annoId];
    // 如果可重用的锚点控件不存在,创建新的可重用锚点控件
    if (!annoView)

    {
        annoView= [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annoId];
      
        
    }
    // 为锚点控件设置图片
    annoView.image = [UIImage imageNamed:@"11.png"];
    // 设置该锚点控件是否可显示气泡信息
    annoView.canShowCallout = YES;
    // 定义一个按钮,用于为锚点控件设置附加控件
    UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    // 为按钮绑定事件处理方法
    [button addTarget:self action:@selector(buttonTapped:)
     forControlEvents:UIControlEventTouchUpInside];
    // 可通过锚点控件的rightCalloutAccessoryViewleftCalloutAccessoryView设置附加控件
    annoView.rightCalloutAccessoryView = button;
    return annoView;

    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【课程特点】1、231节大容量课程:包含了SwiftUI的大部分知识点,详细讲解SwiftUI的方方面面;2、15个超级精彩的实例:包含美食、理财、健身、教育、电子商务等各行业的App实例;3、创新的教学模式:手把手教您SwiftUI用户界面开发技术,一看就懂,一学就会;4、贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标;5、语言简洁精练:瞄准问题的核心所在,减少对思维的干扰,并节省您宝贵的时间;6、视频短小精悍:即方便于您的学习和记忆,也方便日后对功能的检索;7、齐全的学习资料:提供所有课程的源码,在Xcode 11 + iOS 13环境下测试通过; 更好的应用,更少的代码!SwiftUI是苹果主推的下一代用户界面搭建技术,具有声明式语法、实时生成界面预览等特性,可以为苹果手机苹果平板、苹果电脑、苹果电视、苹果手表五个平台搭建统一的用户界面。SwiftUI是一种创新、简单的iOS开发的界面布局方案,可以通过Swift语言的强大功能,在所有的Apple平台上快速构建用户界面。 仅使用一组工具和API为任何Apple设备构建用户界面。SwiftUI具有易于阅读和自然编写的声明式Swift语法,可与新的Xcode设计工具无缝协作,使您的代码和设计**同步。自动支持动态类型、暗黑模式、本地化和可访问性,意味着您的**行SwiftUI代码已经是您编写过的非常强大的UI代码了。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值