MKMapView 学习总结(一)

来源:互联网 发布:sql注入语句输入哪里 编辑:程序博客网 时间:2024/05/14 14:24

MKMapView对象提供内嵌的map接口。和maps应用程序提供的类似。你可以使用这个类来显示地图信息并且来通过你的应用程序操控地图内容。你可以通过一个指定的座标来center你的map,指定你想要显示的区域大小。并且自定义map的注释(座标定位后点击大头针显示的内容)。

当你初始化一个map view的时候,你应该指定map显示的初始区域。你通过设置map的region属性来设定。一个区域通过一个center point和一个水平以及垂直的距离来设定,类似于跨度span。这个锚定义了在给定的点上map显示多大范围,以及如果设置缩放等级。指定一个大的span可以使得用户看到一个广阔的地理区域和对应的低等级的缩放。指定一个小的span导致用户看到更狭小的地理区域和对应的更高级别的缩放比例。

除了编程设置span,mkmapview类支持许多标准的用于改变位置和zoom等级的交互。特别的是,map view支持轻打和捏的手势来在map周围滚动和缩小放大。默认支持但是也可以使用scrollEnabledzoomEnabled来关掉这些支持。

你也可以使用投射的map坐标而不是区域来设置一些值。当你投射球体的弧面到一个水平面上时,你得到一个map的两个空间版本,经度线看上去是平行的。为了指定locations和distances,你需要使用MKMapPoint,MKMapSize, 和MKMapRect类型。

尽管你不应当子类化mkmapview类,你可以通过提供delegate对象来获取map view 行为信息。map view调用这些你自定义的delegate方法来得知map状态的改变并且调整自定义注释的显示。注释的显示部分详见Annotating the Map。delegate对象可以是你程序中的任何对象只要符合MKMapViewDelegate协议。更多信息可以查看MKMapViewDelegate Protocol Reference

Annotating the Map

一个注释对象可以是符合MKAnnotation协议的任何的对象。注释对象主要通过你应用程序的数据模块类来实现。这允许你直接操控注释数据而且对map view也是可用的。每一个注释对象包括关于注释地点并且可以在插图编号中显示的信息。

注释对象的描述被一个注释view来操控。这个对象是MKAnnotationView类实例。一个annotation view负责显示注释信息。例如,maps应用程序使用一个pin图标来指示地图上一个感兴趣的特定地点。(map kit框架在你的应用程序中提供了类似的MKPinAnnotationView类)你应当也创建包含更大分量的注释views。

因为注释view只有在他们出现在屏幕上时才需要,mkmapview类提供了没有使用的注释views的队列机制。注释views被派发了复用标示符。用于控件复用。这个特点通过单次只使用一小部分数量的注释views的方法实现了提高内存使用的方法。也提高了当map滚动时需要添加新的view来展示滚动效果的效果。

当配置你的map接口时,你i 应该添加你所有的注释对象到正确的地方。map view使用每一个注释对象中的坐标数据来决定哪些注释view需要出现在屏幕中来。当一个注释出现在屏幕上,map view就通知他的delegate来创建对应的注释view。如果你的应用程序有不同类型的注释,他可以区分不同的注释view类来显示各种类型。

Adding Overlays to the Map

你可以使用overlays来在map上呈现内容。一个overlay对象可以是符合MKOverlay协议的任何对象。一个overlay对象是一个data对象包含需要指定overlay形状和大小以及在map上的位置。overlays可以标示的形状有圆形,长方形,多条分割线和简单或者复杂的多边形。你也可以定义自己的overlays来代替这些形状。

在ios7以及以上版本,overlay的展示通过overlay renderer对象来管控。是一个MKOverlayRenderer类型的实例。renderer的任务是绘制overlay的内容到屏幕上当被map view要求这么做时。例如,如果你有一个线条的overlay来标示一个bus route,你可以使用polyline renderer来绘制bus route的线条。你也可以定义一个renderer来绘制bus route路线和图标。当指定overlays的时候,你也可以将他们添加到map的指定levels上。允许他们可以在map 内容上面或者下面来绘制。在ios7之前,overlays使用overlay views来绘制,这些属于MKOverlayView

当配置你的map接口时,你可以在任何时候添加overlay 对象。map view使用每一个overlay对象的数据来确定什么时候对应的overlay view需要显示在屏幕上。当一个overlay出现在屏幕上时,map view让他的代理来创建对应的overlay renderer。

Accessing Map Properties

  • mapTypeProperty
  • zoomEnabledProperty
  • scrollEnabledProperty
  • pitchEnabledProperty
  • rotateEnabledProperty
Accessing the Delegate
  • delegateProperty
Manipulating the Visible Portion of the Map
  •   regionProperty
region包括地图中心位置的经纬度和座标用来显示的span。span值提供了一个显示的map的缩放值。显示区域越大,zoom值越小。显示区域越小,zoom值越大。
如果值改变region的center coordinate的话也可以导致span显示的改变。因为span表示的distances因为不同的经纬度改变了,地图可能需要调整span来计算新的location。如果你想改变center coordinate但是并不想改变zoom level的话,就要使用centerCoordinate来代替了
改变合适的值会立即更新map view。当设置这个属性的时候,map可以调整新的region value来适应map的可视区域。这个确保了这个属性的值总是折射出map的可视范围。但是如果你在设置了这个属性后再获得这个属性的值,这个值可能和你设置的不匹配。(你可以使用regionThatFits方法来确保region最终呗map设置了)
  •   - setRegion:animated:
  •   centerCoordinateProperty
             map view的中央coordinate改变这个属性的值可以使用新的座标来居中map。而不改变当前的zoom level。
  •   - setCenterCoordinate:animated:

            可以只改变center coordinate而不改变zoom level

  •   - showAnnotations:animated:

            设置可视区域mao可以显示指定的注解们。调用这个方法会更新region属性值。

  •   visibleMapRectProperty

            当前map view的可视区域 

  •   - setVisibleMapRect:animated:
  •   - setVisibleMapRect:edgePadding:animated:

Configuring the Map’s Appearance
  •  cameraProperty

            camera对象定义了一个map表面的点来显示map。可以提供一个类似3d-like的外观。你可以使用camera来旋转map这样他就面向来匹配用户的heading。如果你想使用动 画效果来显示camera位置,就使用方法setCamera:animated:来取代

  • - setCamera:animated:
  •  showsPointsOfInterestProperty

boolean值来指示是否map显示point-of-interest信息。当这个属性设置为yes的时候,map会为restaurants, schools, and other relevant points of interest.显示icons和labels。

  • showsBuildingsProperty

boolean值来指示是否显示被挤压的建筑物信息。如果是yes并且camera的螺旋角大于0,map积压建筑物,这样就会将这些建筑物以3d的效果呈现在map上。maptype必须设置为standard类型才可以有这种效果。默认值是yes。

  • showsCompassProperty

来指示是否显示指南针。在os x中,使用这个属性来呈现或者隐藏使得用户可以改变map的heading方向

  • showsZoomControlsProperty

来指示是否显示zoom调节的控件。这个属性可以允许用户来调整zoom level

Displaying the User’s Location

  •   showsUserLocationProperty

boolean值来指明是否map应当显示用户的locaiton。这个属性并不指明是否用户的位置在map上显示。只指明map view是否应当显示。设置成yes会让map view使用core location框架来找到当前的位置并且显示在地图上。只要设置为yes,map view就会持续跟踪用户的locaiton并且阶段性地来更新他。默认值是no。

显示用户地locaiton并不保证locaiton在map中就会出现在显示区域。user可能滚动了map导致当前地位置滚动出了屏幕。可以使用userLocationVisible属性来判断是否用户地current locaiton出现在了map上。

  •   userLocationVisibleProperty
  •   userLocationProperty

注解对象用来表示用户的当前位置

Annotating the Map

  •   annotationsProperty
  •   - addAnnotation:

添加一个annotation

  •   - addAnnotations:
  •   - removeAnnotation:
  •   - removeAnnotations:
  •   - viewForAnnotation:

返回和这个annotation对象关联的annotation view。如果view没有创建那么会返回nil。如果annotation没有在地图的显示范围中也会返回nil。

  •   - annotationsInMapRect:
  •   annotationVisibleRectProperty
  •   - dequeueReusableAnnotationViewWithIdentifier:

Managing Annotation Selections

  •   selectedAnnotationsProperty

当前被选中的annotations。

  •   - selectAnnotation:animated:

选择指定的annotition并且显示一个callout view。

  • - deselectAnnotation:animated:

Accessing Overlays

  • overlaysProperty
  • - overlaysInLevel:
  • - rendererForOverlay:

Adding and Inserting Overlays

  • - addOverlay:level:
  • - addOverlays:level:
  • - addOverlay:
  • - addOverlays:
  • - insertOverlay:atIndex:level:
  • - insertOverlay:atIndex:
  • - insertOverlay:aboveOverlay:
  • - insertOverlay:belowOverlay:
  • - exchangeOverlay:withOverlay:
  • - exchangeOverlayAtIndex:withOverlayAtIndex:

Removing Overlays

  • - removeOverlay:
  • - removeOverlays:

Converting Map Coordinates

  • - convertCoordinate:toPointToView:

将map座标转换成指定view中的一点。这个点对应特定的经纬度值。

  • - convertPoint:toCoordinateFromView:

将特定view中的一点转换成map中的座标。

  • - convertRegion:toRectToView:

将一个map区域转换成指定view中的巨型区域。

  • - convertRect:toRegionFromView:

将特定view座标系统中的矩形区域转换成一个地图区域

Adjusting Map Regions and Rectangles

  • - regionThatFits:
  • - mapRectThatFits:
  • - mapRectThatFits:edgePadding:

Constants

  • MKMapType
  • MKOverlayLevel

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩一读书就哭怎么办 小孩上中班还哭怎么办 14岁初中生厌学怎么办 加拿大签证拒签了怎么办 离婚后不给孩子抚养费怎么办 格力空调出现e1怎么办 联想一键恢复后怎么办 微盘密码忘记了怎么办 乐高零件丢了怎么办 tpu手机壳变黄怎么办 脚被铁钉扎了怎么办 孩子性格内向不善于交际怎么办 3岁宝宝胆小怕人怎么办 焦虑症又复发了怎么办 有强迫思维的人怎么办 微信图片是黑的怎么办 玩cf老是卡屏怎么办 玩cf电脑卡屏怎么办 u盘装系统蓝屏怎么办 三星a8无限重启怎么办 旋转轮胎车翻了怎么办 轮胎卸不下来了怎么办 饥荒生病的虫洞怎么办 不小心点了暗网怎么办 苹果手机id用不了怎么办 电脑病毒杀不掉怎么办 高考信息填错了怎么办 家长不给买手机怎么办 2个月宝宝吃奶少怎么办 铅笔断在肉里怎么办 文明6金币负了怎么办 存了理财急用钱怎么办 银行开户许可证丢了怎么办 hcg值低怎么办怎么补 定期存款纸丢了怎么办 我定期存折丢了怎么办 急用钱又借不到怎么办 模拟人生4变胖了怎么办 老婆不与我同房怎么办 用激素药发胖了怎么办 打了激素药发胖怎么办