是否可以用动态文本标签替换注释的图钉图标?
也许使用CSS,或动态创建图像?
例如,使用JavaScript在Google Maps API上使用CSS完成标签.
我想在我的mapView中显示一个指向点的路线,我使用此代码创建路线:
- (IBAction)backToYourCar {
MKPlacemark *sourcePlacemark = [[MKPlacemark alloc] initWithCoordinate:self.annotationForCar.coordinate addressDictionary:nil];
NSLog(@"coordiante : locationIniziale %f", sourcePlacemark.coordinate.latitude);
MKMapItem *carPosition = [[MKMapItem alloc] initWithPlacemark:sourcePlacemark];
MKMapItem *actualPosition = [MKMapItem mapItemForCurrentLocation];
NSLog(@"coordiante : source %f, ActualPosition %f", carPosition.placemark.coordinate.latitude ,actualPosition.placemark.coordinate.latitude);
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
request.source = actualPosition;
request.destination = carPosition;
request.requestsAlternateRoutes = YES;
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) {
if (error) {
NSLog(@"Error : %@", error);
}
else {
[self showDirections:response]; //response is provided by the CompletionHandler …Run Code Online (Sandbox Code Playgroud) 在观看WWDC视频206后,我认为将详细的标注视图添加到mapView注释视图是一项微不足道的任务.
所以,我认为我做错了什么.
设置了引脚视图
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let view:MKAnnotationView!
if let dequed = routeMapView.dequeueReusableAnnotationViewWithIdentifier("pin") {
view = dequed
}
else {
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
}
let x = UIView(frame: CGRectMake(0, 0, 200, 200))
x.backgroundColor = UIColor.redColor()
// shows the red
//view.leftCalloutAccessoryView = x
// working as no subtitle - but no red view
view.detailCalloutAccessoryView = x
view.canShowCallout = true
return view
}
Run Code Online (Sandbox Code Playgroud)
我只能得到这个
我知道这个观点正在发挥作用,因为如果我试着用它leftCalloutAccessoryView来做

我肯定错过了什么.请注意,如果我只是添加图像detailCalloutAccessoryView等
view.detailCalloutAccessoryView …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个MapAnnotation项目添加到我的Map()视图中MapKit。
如果您在文本字段中手动添加坐标,则一切正常,但我找不到任何通过点击地图来添加坐标的方法。
我在互联网上阅读了很多内容,但没有找到任何有关onTap()地图事件处理的信息。
这是我到目前为止的地图视图的样子:
struct MyMap : View {
@State private var myRegion:MKCoordinateRegion = {
var newRegion = MKCoordinateRegion()
newRegion.center.latitude = 53.7576508
newRegion.center.longitude = -11.1811597
newRegion.span.latitudeDelta = 0.1
newRegion.span.longitudeDelta = 0.1
return newRegion
}()
@State private var annotationItems : [Annotation] = [
Annotation(name: "Pin1", description: "myDescription", coordinate: CLLocationCoordinate2D(latitude: 123.7576508, longitude: -7.2373215))
]
var body: some View {
ZStack {
Map(coordinateRegion: self.$myRegion, interactionModes: .all, annotationItems: annotationItems){ item in
MapAnnotation(coordinate: item.coordinate){
PinView(pin: item)
} …Run Code Online (Sandbox Code Playgroud) 在iPhone上,我们拥有Apple惊人的MapKit.Mac OS X有类似的东西吗?
如果可能的话,比简单的WebView更先进,因为我需要它至少自动管理:
(即使地图不是来自谷歌也没关系.)
非常感谢你!
我有以下问题:
我有一个"绘制的地图"(图像),我作为叠加添加到MapView.有没有问题..但我需要的MapView限制在覆盖的区域,因此用户不能滚动/缩放这个区域之外..但它应该可以滚动/变焦的"边界内"覆盖 - 意味着我不能只为MapView禁用缩放/滚动.
关于这个主题有什么想法/解决方案吗?使用MapView/-Kit的原因是我需要将各种POI添加到自定义地图.仅使用ImageView + ScrollView呈现自定义地图时,这可能会变得更加复杂.
我已经研究了很多这个主题,但我没有找到一个很好的解决方案.
任何帮助表示赞赏!
最诚挚的问候,基督徒
编辑:这是我们的解决方案: 您提供了一个topleft和一个底部坐标来限制地图.(最小)缩放级别也是有限的.我已经停用减速功能,你可以从地图中弹出一点(为了更好的性能/ ux).我在叠加层上添加了一个〜1km的灰色边框,因此用户无法看到谷歌的原始世界地图.
LimitedMapView.h:
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface LimitedMapView : MKMapView <UIScrollViewDelegate>{
}
@property (nonatomic, assign) CLLocationCoordinate2D topLeftCoordinate;
@property (nonatomic, assign) CLLocationCoordinate2D bottomRightCoordinate;
@end
Run Code Online (Sandbox Code Playgroud)
LimitedMapView.m:
#import "LimitedMapView.h"
@implementation LimitedMapView
@synthesize topLeftCoordinate, bottomRightCoordinate;
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
if([super respondsToSelector:@selector(scrollViewDidZoom:)]) [super scrollViewDidZoom:scrollView];
if ([self region].span.latitudeDelta > 0.002401f || [self region].span.longitudeDelta > 0.003433f) {
CLLocationCoordinate2D center = self.centerCoordinate;
MKCoordinateSpan span = MKCoordinateSpanMake(0.002401f, 0.003433f);
self.region = MKCoordinateRegionMake(center, span);
}
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if([super …Run Code Online (Sandbox Code Playgroud) 我希望能够判断tap是否在MKPolygon中.
我有一个MKPolygon:
CLLocationCoordinate2D points[4];
points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116);
points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066);
points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981);
points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267);
MKPolygon* poly = [MKPolygon polygonWithCoordinates:points count:4];
[self.mapView addOverlay:poly];
//create UIGestureRecognizer to detect a tap
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(foundTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self.mapView addGestureRecognizer:tapRecognizer];
Run Code Online (Sandbox Code Playgroud)
它只是科罗拉多州的基本轮廓.
我得到了lat/long转换设置:
-(IBAction)foundTap:(UITapGestureRecognizer *)recognizer
{
CGPoint point = [recognizer locationInView:self.mapView];
CLLocationCoordinate2D tapPoint = [self.mapView convertPoint:point toCoordinateFromView:self.view];
}
Run Code Online (Sandbox Code Playgroud)
但如果我的分接点在MKPolygon内,我不确定如何技术.似乎没有办法做这个检查,所以我猜我需要将MKPolygon转换为CGRect并使用CGRectContainsPoint.
MKPolygon有一个.points属性,但我似乎无法让它们退出.
有什么建议?
编辑:
以下两种解决方案均适用于iOS 6或更低版本,但在iOS 7中有效.在iOS 7中,该polygon.path属性始终返回NULL.安娜女士非常友好地提供了另一个SO问题的解决方案.它涉及从多边形点创建自己的路径以进入 …
我想我可能已经在iOS4的mapkit API中发现了一个错误,但由于我仍然认为自己是一个新手,我想我会在这里查看是否有人可以指出我可能做错了什么.
我有一个应用程序,我已经工作了几个星期,在其中使用mapview并利用MKUserTrackingButton来切换跟踪模式.在iOS 5上它工作正常但是从升级到6它有奇怪的行为.当你将mapview放入跟踪带有标题的用户之后的跟踪模式时,如果你相对静止,它会很好,但是当你开始在汽车中移动时,每次回到常规跟踪模式时它会以航向模式退出轨道.经过许多令人沮丧的时间试图找出它后,我决定使用最小的mapview制作一个新的简单应用程序并跟踪,看看它是否只是我的编码或可能的错误.新的应用程序做同样的事情.我发布了以下所有代码.希望有人可以帮我告诉我,如果我做错了.
这是app delegate标题
// iTrackerAppDelegate.h
// iTracker
//
// Created by Victor Hudson on 9/22/12.
// Copyright (c) 2012 Victor Hudson. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "TrackerViewController.h"
@interface iTrackerAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) IBOutlet UIWindow *window;
@end
Run Code Online (Sandbox Code Playgroud)
这是app委托实现
//
// iTrackerAppDelegate.m
// iTracker
//
// Created by Victor Hudson on 9/22/12.
// Copyright (c) 2012 Victor Hudson. All rights reserved.
//
#import "iTrackerAppDelegate.h"
@implementation iTrackerAppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary …Run Code Online (Sandbox Code Playgroud) 我非常需要为我的应用做离线地图,因为它主要是为泰国制作的,因为泰国通常很难连接互联网.我现在正在使用OpenStreetMap我的MKTileOverlay但是在实现它以供离线使用时遇到问题.我找到了一个教给子类的教程MKTileOverlay.所以,在我ViewController的地图上我有:
- (void)viewWillAppear:(BOOL)animated {
CLLocationCoordinate2D coord = {.latitude = 15.8700320, .longitude = 100.9925410};
MKCoordinateSpan span = {.latitudeDelta = 3, .longitudeDelta = 3};
MKCoordinateRegion region = {coord, span};
[mapView setRegion:region];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Map";
NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
self.overlay = [[XXTileOverlay alloc] initWithURLTemplate:template];
self.overlay.canReplaceMapContent = YES;
[mapView addOverlay:self.overlay level:MKOverlayLevelAboveLabels];
}
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay {
return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
Run Code Online (Sandbox Code Playgroud)
在我的子类中MKTileOverlay,我有:
- (NSURL *)URLForTilePath:(MKTileOverlayPath)path { …Run Code Online (Sandbox Code Playgroud) 在iOS11该zPosition停止的annotationView.layer工作.每次地图区域发生变化.
bringViewToFront/ SendViewToBack方法Xcode 8.3/9
更新(解决方案感谢Elias Aalto):
创建MKAnnotationView时:
annotationView.layer.zPosition = 50;
if (IS_OS_11_OR_LATER) {
annotationView.layer.name = @"50";
[annotationView.layer addObserver:MeLikeSingleton forKeyPath:@"zPosition" options:0 context:NULL];
}
Run Code Online (Sandbox Code Playgroud)
在MeLikeSingleton或你在那里的任何观察者对象:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context {
if (IS_OS_11_OR_LATER) {
if ([keyPath isEqualToString:@"zPosition"]) {
CALayer *layer = object;
int zPosition = FLT_MAX;
if (layer.name) {
zPosition = layer.name.intValue;
}
layer.zPosition = zPosition;
//DDLogInfo(@"Name:%@",layer.name);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它是如何在IOS11之前工作的
..是用的
- (void)mapView:(MKMapView …Run Code Online (Sandbox Code Playgroud)