标签: mapkit

iPhone MapKit:注释的可访问性

有人知道如何将可访问性标签添加到地图注释中吗?我已经尝试将它添加到MKAnnotationView和MKAnnotation但是都不起作用.选择注释时,VoiceOver始终只读取"pin",而原始地图应用程序在选择注释时会显示正确的标题.

谢谢和最好的问候,

克里斯

annotations accessibility mapkit ios voiceover

5
推荐指数
1
解决办法
1276
查看次数

在XCode 4.6中滚动地图时,MapKit更改注释视图顺序

我是一位经验丰富的iOS开发人员,但这确实让我感到难过。我正在同时向苹果提交问题报告。

我正在向MKMapKit地图(Xcode 4.6)添加注释。每个注释都是MyAnnotation类;MyAnnotation定义了一个属性location_id,我用它来跟踪该注释。

问题很简单:我希望location_id为-1的MyAnnotation出现在其他所有内容的前面。

为此,我在我的MKMapViewDelegate中覆盖了mapView:didAddAnnotationViews ::

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {


// Loop through any newly added views, arranging them (z-index)
for (MKAnnotationView* view in views) {

    // Check the location ID
    if([view.annotation isKindOfClass:[MyAnnotation class]] && [((MyAnnotation*)(view.annotation)).location_id intValue]==-1 ) {

        // -1: Bring to front
        [[view superview] bringSubviewToFront:view];
        NSLog(@"to FRONT: %@",((MyAnnotation*)view.annotation).location_id);

    } else {

        // Something else: send to back
        [[view superview] sendSubviewToBack:view];
        NSLog(@"to BACK: %@",((MyAnnotation*)view.annotation).location_id);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

这很好。我有一个“添加”按钮,可将注释添加到地图中心附近的随机位置。每次我按“添加”按钮,都会出现一个新注释。但没有任何东西会隐藏location_id为-1的注释。

**直到**我滚动!

一旦开始滚动,便会重新排列所有注释(z顺序),不再适用我的仔细堆叠。

真正令人困惑的是,我之前毫无问题地完成了图标顺序堆叠。我已经创建了一个全新的单视图应用程序来测试该问题。向后或向前发送MKAnnotationView项目仅在滚动之前有效。除了上面描述的代码外,此骨架应用程序中没有其他内容。我想知道最新的MapKit框架中是否存在某种错误。

最初的问题是在用户滚动时尝试添加新的注释(mapView:regionDidChangeAnimated :)。注释添加;mapView:didAddAnnotationViews:代码触发;然后顺序在框架中被看不见的手打乱(大概是在滚动完成时)。

如果您有兴趣,这是我的viewForAnnotation:

-(MKAnnotationView*)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { …
Run Code Online (Sandbox Code Playgroud)

xcode mapkit mkannotationview

5
推荐指数
1
解决办法
1192
查看次数

要旋转的MKOverlayView

我有一个叠加的路线放在地图上.我必须调整它的旋转,使其与底层地图视图完全重叠.我怎样才能做到这一点?我找到了旋转的角度.如何旋转叠加视图?到目前为止,我已经添加了叠加层,但无法使用变换进行旋转.我注意到的是,当我改变角度时,图像不会旋转,而是沿x轴(侧面)滑动.

这是我试过的代码

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"routeImage" ofType:@"png"];
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];

    MKMapRect theMapRect = self.overlay.boundingMapRect;
    CGRect theRect = [self rectForMapRect:theMapRect];

    CGAffineTransform transform = CGAffineTransformMakeRotation((-35.88) / 180.0 * M_PI);
    [self setTransform:transform];

    CGContextSaveGState(context);

    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextTranslateCTM(context, 0.0, -theRect.size.height);
    CGContextDrawImage(context, theRect,image.CGImage);
    CGContextRestoreGState(context);
}
Run Code Online (Sandbox Code Playgroud)

这就是我得到的

在此输入图像描述

我有一个解决方法,我使用GIMP手动旋转图像并放置它.但我需要它来定制.

这是使用GIMP转换的图像,当作为叠加层放置在地图上时

这是我使用变换旋转上下文时[注意:旋转上下文时图像旋转但不在确切的位置见图像.此外,图像在缩放时中断]

这就是我做的

      //Hayl-Road-Final.png is the actual image without transformation using GIMP

        UIImage *image   = [[UIImage imageNamed:@"Hayl-Road-Final.png"] retain];
        CGImageRef imageReference = image.CGImage;


        MKMapRect theMapRect …
Run Code Online (Sandbox Code Playgroud)

mapkit ios mkoverlay

5
推荐指数
1
解决办法
856
查看次数

iOS MapView位于导航栏,状态栏和标签栏控制器下

我有一个带导航控制器和标签栏控制器的ViewController.此ViewController有2个按钮,用于切换滚动视图和地图视图的可见性.最重要的是让这两个按钮始终显示在同一个地方,无论方向或恰好可见的视图.

我遇到的问题是MapView的大小不正确.如果我只是从self.view.bounds给它一个框架它位于导航栏/标签栏下 - 基本上占据了整个屏幕.这会抛弃我的切换按钮的位置.

我注意到我的ScrollView也是这样(使用背景颜色和半透明导航栏),但子视图在其上的位置保持在可见区域内(导航栏和标签栏之间).因此,当我添加切换按钮时,它们会显示在正确的位置.

当我按下切换按钮时,我只是将按钮的父视图重新分配给现在显示的视图(ScrollView或MapView).这总是适用于滚动视图,但由于定位,它们最终会在显示MapView时进入导航栏下方.

我已经尝试手动创建MapView的框架,但我得到奇怪的结果.我用它作为框架:

CGRect mapFrame = CGRectMake(
    0,
    (self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height),
    self.view.frame.size.width,
    (
     self.view.frame.size.height
     - (self.navigationController.navigationBar.frame.size.height + [UIApplication sharedApplication].statusBarFrame.size.height + self.tabBarController.tabBar.frame.size.height)
    )
);
Run Code Online (Sandbox Code Playgroud)

然后我设置自动调整大小的面具

[self.mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin];
Run Code Online (Sandbox Code Playgroud)

但有了这个,如果我以横向模式进入视图控制器 - MapView不在屏幕上.如果我进入纵向模式然后旋转到横向,则上边距关闭但大约10个点,因此它仍然位于导航栏下方(并且在标签栏和地图视图底部之间有可见边距).

如何使MapView子视图仅显示在可见区域内,就像ScrollView一样?如果地图本身位于导航栏/标签栏下方,我不介意

uiviewcontroller mapkit ios

5
推荐指数
1
解决办法
4270
查看次数

MKMapView _annotationContainer崩溃

我正在使用MKMapView在iOS模拟器中获得看起来随机发生的崩溃.它不是由任何用户操作触发的,它只是无中生有.我得到以下堆栈跟踪:

<_NSCallStackArray 0x2d9762b0>(
0   ???                                 0x137d69bd 0x0 + 326986173,
1   Foundation                          0x03ca3b0a -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 282,
2   Foundation                          0x03c10b61 _NSGetUsingKeyValueGetter + 81,
3   Foundation                          0x03c1019b -[NSObject(NSKeyValueCoding) valueForKey:] + 260,
4   AccessibilityUtilities              0x11ad1a3f -[NSObject(UIAccessibilitySafeCategory) safeValueForKey:] + 43,
5   MapKitFramework                     0x12090aa4 -[MKBasicMapViewAccessibility(SafeCategory) accessibilityContainerElements] + 91,
6   UIAccessibility                     0x11fc7149 -[NSObject(AXPrivCategory) accessibilityElementCount] + 34,
7   UIAccessibility                     0x11fc751f -[NSObject(AXPrivCategory) _accessibilityHasOrderedChildren] + 59,
8   UIKit                               0x11ebb388 -[UIViewAccessibility(SafeCategory) _accessibilitySubviewsForGettingElementsIncludingContainers:includingOpaqueElementProviders:] + 2269,
9   UIKit                               0x11ebba96 -[UIViewAccessibility(SafeCategory) _accessibilityElementsInContainer:topLevel:includeKB:includeOpaqueElementProviders:] + 486,
10  UIKit                               0x11eba12f -[UIViewAccessibility(SafeCategory) _accessibilityElementsInContainer:topLevel:includeKB:] + 64,
11  UIKit …
Run Code Online (Sandbox Code Playgroud)

objective-c mapkit mkmapview ios

5
推荐指数
1
解决办法
395
查看次数

RegionMonitoring监控的"区域"数,基于用户在iOS7中的当前位置

我正在开发这样一个应用程序执行以下操作的项目:

  1. 用户选择半径(10米到1000米),然后viewController按"开始"按钮转到下一个
  2. 在这里,应用程序抓取用户当前位置并根据具有所选半径的当前位置开始"区域监视"
  3. 如果用户越过该特定边界(10米到1000米),则它会发出"ExitRegion"警报消息.并根据用户新的当前位置再次启动"区域监控".应用程序一直在这样做,包括前台和后台模式.我设法做到这一点并且工作得很好.

现在,我在这里监视一个区域,然后再监视另一个区域.所以数字实际上就是一个.但是我知道一个应用程序可以通过"区域监控"监控的区域的最大数量是15.现在我的问题是在这种情况下我应该处理这个最大数量的区域问题吗?如果是,那怎么样?

我想补充的另一件事是,它有一些解决方案,它只适用于iOS 6及更早版本.所以请根据用户在iOS7中的当前位置,通过"RegionMonitoring"监控处理"区域"数量的解决方案,让我知道.

如果能够给出答案或任何建议来完成我的应用程序所需要求,我将感到非常高兴.

core-location mapkit ios geofencing region-monitoring

5
推荐指数
1
解决办法
1898
查看次数

MKMapView setRegion:在世界边缘崩溃

我正在使用此代码来设置一个区域MKMapView,使其居中pin并缩放以显示大约10km的区域.

CLLocationAccuracy accuracy = kCLLocationAccuracyKilometer;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(pin.coordinate, accuracy * 10.0f, accuracy * 10.0f);
[self.mapSubView setRegion:region animated:NO];
Run Code Online (Sandbox Code Playgroud)

运行纬度-90,经度-58.359001159667969的引脚坐标的代码时,region生成如下所示:

mapSubView绘制时发生崩溃: -

因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无效区域<center:-90.00000000,-58.35900116 span:+0.08953039,+ 1462142065660629.00000000>'

我第一次尝试解决此问题是检查"边缘"纬度/长度(-90,+ 90,-180,+ 180),这解决了这个问题.但是,如果纬度更改为-89.99999,则问题将返回.

我猜这是由于纬度存在的组合-90和/或区域跨度的经度三角洲是如此之大,导致在实际上是"这个世界的"一区:P

任何关于如何在任何坐标处围绕销钉居中的建议,显示~10km的区域,没有这种碰撞将是非常感谢.

objective-c core-location mapkit mkmapview

5
推荐指数
2
解决办法
1272
查看次数

使用Swift在MapKit中进行聚类

Swift中是否有可能在MapKit中聚类标记?我知道在Google Maps SDK中可以使用,但我在MapKit中找不到相同的功能.我找到了一些Obj-C的库,但没有为Swift找到

我找到的一些库:

mapkit swift

5
推荐指数
2
解决办法
7469
查看次数

CLVisit如何运作?

我正在开发一个应用程序,它在很大程度上依赖于监视可能在多个地区/区域中的用户访问.我目前正在尝试区域监控工作得很好,但是,位置回调并不像我想要的那样准确.我见过CLVisit,但那里的文档并没有很好地解释它,特别是它的使用.

core-location mapkit ios region-monitoring

5
推荐指数
1
解决办法
3925
查看次数

如何获得iPhone地图应用程序蓝点与浅蓝色字段的当前位置?

我认为标题是非常自我解释的.目前,当我为当前位置添加默认注释时:

let currentAnnot = MKPointAnnotation()
currentAnnot.coordinate = loc.coordinate
mainMap.addAnnotation(currentAnnot)
Run Code Online (Sandbox Code Playgroud)

它给了我一个红色别针.我想要与Apple iPhone地图应用程序默认使用的浅蓝色字段相同的蓝点.是否有特殊名称,如何添加?

annotations mapkit swift

5
推荐指数
1
解决办法
3282
查看次数