标签: mkoverlay

在MKMapView中围绕用户位置绘制一个1000米半径的圆

(使用iOS 5和Xcode 4.2)

我有一个MKMapView,想在用户位置周围绘制一个1000米半径的圆.

从表面上看,似乎实现mapView:viewForAnnotation: map view delegate方法,并为用户位置添加自定义MKAnnotationView,将是一个完美的解决方案.它看起来像这样:

- (MKAnnotationView *)mapView:(MKMapView *)mapView
            viewForAnnotation:(id <MKAnnotation>)annotation
{
    // If it's the user location, return my custom MKAnnotationView.
    if ([annotation isKindOfClass:[MKUserLocation class]]) {
        return myCustomAnnotationView;
    } else {
        return nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当您放大和缩小地图时,地图上的注释不会缩放.

所以我尝试添加叠加层(因为叠加层与地图一起缩放),使用MKCircle类并将其坐标设置为来自locationManger/map视图委托的最新坐标.但是由于MKCircle 的坐标属性是readonly,我不得不删除叠加层,然后每次用户移动时添加一个新叠加层.当它发生时引起明显的闪烁.

当地图视图缩小和缩小时,有没有办法无缝地制作注释比例?或者是否有一种很好的方法可以使叠加层随着用户位置的变化无缝移动?

我非常感谢你的帮助:)

mkmapview mkannotationview ios mkoverlay ios5

58
推荐指数
4
解决办法
5万
查看次数

如何在MKMapView上捕捉Tap手势

我正在尝试捕捉我的点击事件MKMapView,这样我就可以MKPinAnnotation在用户点击的点上删除.基本上我有一个覆盖的地图MKOverlayViews(显示建筑物的叠加层),我想通过删除MKPinAnnotaion并在标注中显示更多信息来为用户提供有关该叠加的更多信息.谢谢.

mkpinannotationview mkmapview ios4 mkoverlay uitapgesturerecognizer

31
推荐指数
2
解决办法
3万
查看次数

如何检测像Maps.app这样的MKPolylines/Overlays上的点击?

在iPhone上内置Maps.app上显示方向时,您可以"选择"通过点击它显示的通常3个路线选项之一.我不想复制这个功能并检查一个tap是否在给定的MKPolyline中.

目前我检测到MapView上的点击如下:

// Add Gesture Recognizer to MapView to detect taps
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleMapTap:)];

// we require all gesture recognizer except other single-tap gesture recognizers to fail
for (UIGestureRecognizer *gesture in self.gestureRecognizers) {
    if ([gesture isKindOfClass:[UITapGestureRecognizer class]]) {
        UITapGestureRecognizer *systemTap = (UITapGestureRecognizer *)gesture;

        if (systemTap.numberOfTapsRequired > 1) {
            [tap requireGestureRecognizerToFail:systemTap];
        }
    } else {
        [tap requireGestureRecognizerToFail:gesture];
    }
}

[self addGestureRecognizer:tap];
Run Code Online (Sandbox Code Playgroud)

我按如下方式处理水龙头:

- (void)handleMapTap:(UITapGestureRecognizer *)tap {
    if ((tap.state & UIGestureRecognizerStateRecognized) == UIGestureRecognizerStateRecognized) {
        // Check if the …
Run Code Online (Sandbox Code Playgroud)

mapkit mkmapview ios mkoverlay mkpolyline

26
推荐指数
2
解决办法
7199
查看次数

在iOS7中检测MKOverlay上的触摸(MKOverlayRenderer)

我有一个可能有数百个多边形的MKMapView.iOS7上假设使用MKPolygon和MKPolygonRenderer.

我需要的是一种对用户触摸其中一个多边形的方式.它们代表地图上具有一定人口密度的区域.在iOS6上,MKOverlay被绘制为MKOverlayViews,因此触摸检测更直接.现在使用渲染器我真的不明白这是怎么做的.

我不确定这会有所帮助甚至是相关的,但作为参考,我会发布一些代码:

这会使用mapData将所有MKOverlay添加到MKMapView.

-(void)drawPolygons{
    self.polygonsInfo = [NSMutableDictionary dictionary];
    NSArray *polygons = [self.mapData valueForKeyPath:@"polygons"];

    for(NSDictionary *polygonInfo in polygons){
        NSArray *polygonPoints = [polygonInfo objectForKey:@"boundary"];
        int numberOfPoints = [polygonPoints count];

        CLLocationCoordinate2D *coordinates = malloc(numberOfPoints * sizeof(CLLocationCoordinate2D));
        for (int i = 0; i < numberOfPoints; i++){
            NSDictionary *pointInfo = [polygonPoints objectAtIndex:i];

            CLLocationCoordinate2D point;
            point.latitude = [[pointInfo objectForKey:@"lat"] floatValue];
            point.longitude = [[pointInfo objectForKey:@"long"] floatValue];

            coordinates[i] = point;
        }

        MKPolygon *polygon = [MKPolygon polygonWithCoordinates:coordinates count:numberOfPoints];
        polygon.title = [polygonInfo objectForKey:@"name"];
        free(coordinates);
        [self.mapView addOverlay:polygon];
        [self.polygonsInfo setObject:polygonInfo forKey:polygon.title]; …
Run Code Online (Sandbox Code Playgroud)

touch mapkit mkmapview ios mkoverlay

24
推荐指数
3
解决办法
7309
查看次数

将倒圆叠加添加到地图视图

(使用iOS 5和Xcode 4.2.)

我按照这里的说明操作:http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/AnnotatingMaps/AnnotatingMaps.html#//apple_ref/doc/uid/TP40009497-CH6-SW15并使用MKCircle和MKCircleView类在我的MKMapView上添加圆形覆盖.

然而我真正想要的是倒圆形叠加,就像下面草图中的左侧地图(目前我有一个像右边那样的圆形叠加):

倒置和非倒置圆形覆盖草图

对于倒圆,叠加应覆盖整个地图 - 除了可见圆.

有没有一种简单的方法可以使用MKCircle/MKCircleView类来实现这一目的?或者我是否需要更深入地定义自定义叠加对象/视图?

谢谢您的帮助 :)

mapkit ios mkoverlay ios5

11
推荐指数
2
解决办法
2001
查看次数

MKPolyline奇怪的渲染与缩放MapKit有关

我有非常简单的View Controller来演示MKPolyline的这种奇怪的渲染行为.没有什么特别的,只是普通的api电话.

import UIKit
import MapKit

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet weak var map: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        map.delegate = self
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        let p1 = CLLocationCoordinate2D(latitude: 51, longitude: 13)
        var coords = [
            p1,
            CLLocationCoordinate2D(latitude: 51.1, longitude: 13),
            CLLocationCoordinate2D(latitude: 51.2, longitude: 13),
            CLLocationCoordinate2D(latitude: 51.3, longitude: 13)
        ]

        let polyline = MKPolyline(coordinates: &coords, count: coords.count)
        map.addOverlays([polyline], level: .aboveRoads)
        let cam = MKMapCamera(lookingAtCenter: p1, fromDistance: 1000, pitch: 45, heading: 0)
        map.setCamera(cam, animated: …
Run Code Online (Sandbox Code Playgroud)

mapkit ios mkoverlay mkpolyline swift

11
推荐指数
1
解决办法
2027
查看次数

以圆形覆盖绘制文本

我正在尝试在MKMapView上绘制一些包含文本的圆形叠加层.我已经将MKCircleView子类化了,其中我放了以下内容(基于此),但文本没有出现.圆圈正确显示.(也尝试了第一个响应的解决方案,结果相同).

-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
   [super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
   NSString * t= @"XXXXX\nXXXX" ;
   UIGraphicsPushContext(context);
   CGContextSaveGState(context); 
   [[UIColor redColor] set];
   CGRect overallCGRect = [self rectForMapRect:[self.overlay boundingMapRect]];
   NSLog(@"MKC :  %lf, %lf ----> %lf , %lf ", mapRect.origin.x ,mapRect.origin.y , overallCGRect.origin.x, overallCGRect.origin.y);
   [t drawInRect:overallCGRect withFont:[UIFont fontWithName:@"Arial" size:10.0] lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
   CGContextRestoreGState(context);
   UIGraphicsPopContext();
}
Run Code Online (Sandbox Code Playgroud)

调试时,我得到这些值

MKC :  43253760.000000, 104071168.000000 ----> 1.776503 , 1.999245 
MKC :  43253760.000000, 104071168.000000 ----> -1.562442 , -2.043090
Run Code Online (Sandbox Code Playgroud)

他们是正常的吗?我错过了什么?

谢谢.

iphone overlay objective-c mkmapview mkoverlay

10
推荐指数
1
解决办法
4839
查看次数

如何绘制填充颜色不是实心而是图像的MKCircle

我发现了如何在地图注释周围绘制一个cricle.我是这样做的:

     MKCircle *circle = [MKCircle circleWithCenterCoordinate:theCoordinate radius:15000];
     [myMap addOverlay:circle];

 -(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay
 {
    MKCircleView *circleView = [[MKCircleView alloc] initWithOverlay:overlay];
    circleView.fillColor =[UIColor redColor];

   return circleView;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我想绘制一个圆形,其填充颜色不是这样的实心:

在此输入图像描述

iphone objective-c mkmapview mkoverlay

10
推荐指数
2
解决办法
5873
查看次数

MKMapView覆盖矢量图块

有什么方法可以MKMapView在iOS 6及更高版本中制作矢量图块并过度使用它们吗?我知道如何使用叠加图像MKOverlayView,但它们是光栅图像.

mapkit mkmapview ios mkoverlay vector-tiles

10
推荐指数
1
解决办法
713
查看次数

动画MKOverlayView

我有一个MKOverlayView,它将动画雷达数据显示为一系列图像.我的问题是MapKit将雷达图像切割成瓷砖.为了交换图像,我有一个调用更新功能的计时器,它在我的叠加层中设置当前图像,然后调用以下内容

[myRadarOverlayView setNeedsDisplayInMapRect:self.mapView.visibleMapRect];
Run Code Online (Sandbox Code Playgroud)

叠加层更新,但一次只有一个瓦片,所以我得到了一个不稳定的动画.关于如何在同一时间使所有瓷砖动画(即交换图像)的任何想法?

animation objective-c mapkit ios mkoverlay

9
推荐指数
1
解决办法
3253
查看次数