MapKit框架的基本使用1

MapKit框架

MapKit框架的使用

  1. 导入框架 MapKit.framework
  2. 导入主头文件 #import

MapKit框架使用须知

  • MapKit框架中所有数据类型的前缀都是MK
  • MapKit有一个比较重要的UI控件:MKMapView 专门用于地图显示

注意:使用MapKit框架,不仅要导入头文件,还要在代码里面使用框架里的某个类创建一个对象 在链接中才会真正把框架导入进来。(或者直接在Build Phases 下的Link Binary With Libraries 中直接导入MapKit框架)
否则就会出现如下错误:
Terminating app due to uncaught exception ‘NSInvalidUnarchiveOperationException’, reason: ‘Could not instantiate class named MKMapView’ 不能实例化一个对象
只要使用框架里的某个类创建了一个对象就不会报错:

  MKMapView *mapView = [[MKMapView alloc] init];

地图的类型

可以通过设置MKMapView的mapType设置地图类型

  MKMapTypeStandard = 0, // 普通地图
  MKMapTypeSatellite, // 卫星云图
  MKMapTypeHybrid, // 混合模式(普通地图覆盖于卫星云图之上)
  MKMapTypeSatelliteFlyover NS_ENUM_AVAILABLE(10_11, 9_0),// 3D立体卫星(iOS9)
  MKMapTypeHybridFlyover NS_ENUM_AVAILABLE(10_11, 9_0),// 3D立体混合(iOS9)

一些属性

// 是否能放大
@property (nonatomic, getter=isZoomEnabled) BOOL zoomEnabled;
// 是否能滚动
@property (nonatomic, getter=isScrollEnabled) BOOL scrollEnabled;
// 是否能旋转
// Rotate and pitch are enabled by default on Mac OS X and on iOS 7.0 and later.
@property (nonatomic, getter=isRotateEnabled) BOOL rotateEnabled NS_AVAILABLE(10_9, 7_0) __TVOS_PROHIBITED;
// 3D View
@property (nonatomic, getter=isPitchEnabled) BOOL pitchEnabled NS_AVAILABLE(10_9, 7_0) __TVOS_PROHIBITED;
// 是否缩放控制
#if !TARGET_OS_IPHONE
@property (nonatomic) BOOL showsZoomControls NS_AVAILABLE(10_9, NA);
#endif
// 是否显示指南针(右上角的)
@property (nonatomic) BOOL showsCompass NS_AVAILABLE(10_9, 9_0) __TVOS_PROHIBITED;
// 是否显示比例尺
@property (nonatomic) BOOL showsScale NS_AVAILABLE(10_10, 9_0);

@property (nonatomic) BOOL showsPointsOfInterest NS_AVAILABLE(10_9, 7_0); // Affects MKMapTypeStandard and MKMapTypeHybrid
// 是否显示建筑物
@property (nonatomic) BOOL showsBuildings NS_AVAILABLE(10_9, 7_0); // Affects MKMapTypeStandard
// 是否显示交通
@property (nonatomic) BOOL showsTraffic NS_AVAILABLE(10_11, 9_0); // Affects MKMapTypeStandard and MKMapTypeHybrid
// 是否显示用户位置
//
// Set to YES to add the user location annotation to the map and start updating its location
@property (nonatomic) BOOL showsUserLocation;

typedef NS_ENUM(NSInteger, MKUserTrackingMode) {
    MKUserTrackingModeNone = 0, // 不追踪
    MKUserTrackingModeFollow, // 追踪
    MKUserTrackingModeFollowWithHeading __TVOS_PROHIBITED, // 带方向的追踪
} NS_ENUM_AVAILABLE(NA, 5_0) __TVOS_AVAILABLE(9_2) __WATCHOS_PROHIBITED;
// 用户追踪模式 打开地图会自动放大
@property (nonatomic) MKUserTrackingMode userTrackingMode NS_AVAILABLE(NA, 5_0);

注意: 当直接调用self.mapView.showsUserLocation = YES;直接使用的情况下不会显示用户的位置,并会报这样一个问题:
Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
请求授权。因为要显示用户的位置,得获取用户的位置,这样涉及到用户隐私,所以要授权

这样就需要导入 #import<CoreLocation/CoreLocation.h>框架,并实例化CLLocationManager对象

@property (nonatomic, strong) CLLocationManager *mgr;
- (CLLocationManager *)mgr
{
    if (!_mgr)
    {
        _mgr = [[CLLocationManager alloc] init];
    }
    return _mgr;
}

然后授权

    // 一定要这样判断一下。不然出问题崩溃
    if ([self.mgr respondsToSelector:@selector(requestAlwaysAuthorization)])
    {
        // 点进去看注释说明
/*
         *    xxxxxxxxxxxxx     xxxxxxxxxxxxx
         *      If the NSLocationAlwaysUsageDescription key is not specified in your
         *      Info.plist, this method will do nothing, as your app will be assumed not
         *      to support Always authorization.
*/
        // 需要在info.plist文件配置NSLocationAlwaysUsageDescription
        [self.mgr requestAlwaysAuthorization];

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值