我想知道是否有人能告诉我如何在地图注释中添加正确的标注附件.我尝试的一切似乎都没有到达任何地方,所以任何帮助将不胜感激.
编辑
我已经尝试过这行代码,但注释没有任何不同.
- (MKAnnotationView *)mapview:(MKMapView *)sender viewForAnnotation:(id <MKAnnotation>)annotation
{
MKAnnotationView *aView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@""];
aView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
aView.canShowCallout = YES;
aView.annotation = annotation;
return aView;
}
Run Code Online (Sandbox Code Playgroud) 我在mapkit中有一个注释显示自定义图像,显示正常,
但是在录制针脚后,注释显示
当我启动视图时,如何在默认情况下显示注释?丝毫敲击针.
- (MKAnnotationView *)mapView:(MKMapView *)mv viewForAnnotation:(id <MKAnnotation>)annotation
{
if([annotation isKindOfClass:[MKUserLocation class]])
return nil;
NSString *annotationIdentifier = @"PinViewAnnotation";
MKPinAnnotationView *pinView = (MKPinAnnotationView *) [mapView
dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
if (!pinView)
{
pinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation
reuseIdentifier:annotationIdentifier] autorelease];
[pinView setPinColor:MKPinAnnotationColorGreen];
pinView.animatesDrop = YES;
pinView.canShowCallout = YES;
UIImageView *houseIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tijereta.png"]];
pinView.leftCalloutAccessoryView = houseIconView;
[houseIconView release];
}
else
{
pinView.annotation = annotation;
}
return pinView;
}
Run Code Online (Sandbox Code Playgroud)
谢谢
当用户在选择注释时点击保存时,我正在尝试保存mapview的缩略图.当用户尚未放大该注释时,会出现此问题,因此尚未加载关闭缩放级别.
这是用户点击保存后我正在做的事情:
但是,当保存图像并且视图被取消时,实际保存的结果图像实际上还没有完成加载,因为我仍然看到带有网格线的卸载地图,如下所示:

我的问题是,在保存此缩略图之前,如何确保地图已完成加载并完成显示?
我想得到一个结果MKMapRect,它在所有方向上比当前大10-20%visibleMapRect.如果这是一个CGRect,我会使用带有负x和y值的CGRectInset,为我提供一个反向插图(即一个更大的rect).不幸的是,MKMapInset不支持负插入值,所以它并不那么容易.
如果map rect的值是可识别单位但原点x和y值大约为4.29445e + 07,宽度/高度为2500-3000,则可能更容易.
我写一个类别手动做了大约10秒,但我想确保我没有先丢失一些东西.有没有更简单的方法来扩展MKMapRect?
我正在寻找一种在iOS 7中实现自定义地图样式的方法,就像使用Google地图一样.我发现一些帖子说这对MapKit来说是不可能的,但是它们都被发布了一段时间.为了澄清,按照风格我说的是自定义颜色,最好也是字体.下面是自定义Google地图样式的示例.
http://www.servendesign.com/wp-content/uploads/2011/12/zaarley-custom-google-maps.jpg
出于性能原因,我更喜欢使用MapKit,但如果不支持我,我也愿意使用其他框架.我见过的是MapBox和Cloudmade,当然还有Google Maps SDK.
有没有办法用MapKit做到这一点?如果没有,最好的方法是什么?
这是我的代码,显示地图上当前位置的警报和蓝点:
MapName.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface MapName : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *MapName;
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
Run Code Online (Sandbox Code Playgroud)
MapName.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
//Center the map
[self gotoLocation];
//Show current position
_MapName.showsUserLocation = YES;
}
Run Code Online (Sandbox Code Playgroud)
我已将密钥NSLocationWhenIsUseUsageDescription作为字符串添加到Info.plist中.我在Xcode上仍然遇到同样的错误.
MKMapView在Interface Builder中向视图添加组件时,可以使用复选框配置它显示的内容:

当您选中"用户位置"时,它会自动在地图上显示用户的位置.
但是,从iOS 8开始,您应该在显示用户位置之前询问位置许可.如果不这样做,您将在控制台中收到"尝试启动MapKit位置更新而不提示"警告.
所以我已经NSLocationWhenInUseUsageDescription为plist 添加了一个键,并将此代码添加到viewDidLoad:
if CLLocationManager.authorizationStatus() == .NotDetermined {
CLLocationManager().requestWhenInUseAuthorization()
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.我确实得到了一个要求许可的弹出窗口,但在我选择一个答案之前,它自己隐藏,地图加载到它下面,我在控制台中收到警告.
我知道showsUserLocation只有获得许可后我才能在代码中设置属性; 但我的观点是,IB中的这个复选框应该做同样的事情,除了它立即开始跟踪.这是否意味着自iOS 8以来我们根本不应该使用此复选框?还是我错误地使用它?
-
更新:实际上,无论是否设置"显示用户位置",弹出窗口都会自行隐藏.我尝试过viewWillAppear或者viewDidAppear做过,但这没有帮助.所以,我不知道究竟在何处,我应该叫requestwhenInUseAuthorization使用时MKMapView...
我正在做一个需要带有标记的地图(包括地址和图片)以及可能需要GPS的应用程序.我正在从Parse数据库中提供数据(地址和图片),我正在为iOS开发...我听说本机更好,但我是谷歌和谷歌地图的忠实粉丝.你会推荐哪一个?Mapkit还是GoogleMaps?一个人比另一个人的好处是什么?
谢谢.玩笑
我有问题MKMapView.放大时,地图无法加载切片.
-(void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error
Run Code Online (Sandbox Code Playgroud)
错误:
Domain = GEOErrorDomain Code = -204"(null)"UserInfo = {SimpleTileRequesterUnderlyingErrors =("Error Domain = GEOErrorDomain Code = -204 \"(null)\"UserInfo = {HTTPStatus = 410,NSErrorFailingURLStringKey = http://gspe19.ls .apple.com/tile.vf?标志= 1&式= 20&大小= 2&规模= 0&v = 11037825&Z = 15&x = 6205&Y = 12336&SID = 0246704635757302674107153038443966765357&ACCESSKEY = 1454685602_q3bVUYvHBdxsSo0A_j0fK7EyQ9b21NPShV7GRLzr4WFkkhxB4vO7%2BlXcGsXJ4zZHvhTaLVWsyPa3PlU60cDrmrFwmwCYBGrLA9mChV%2FHoRHoTU9AGI72VQP9UKZW%2B0GKqfRhpcw4xr%2F%2FTTVgJZ7wU4U4KnA8K2rVVQ%2FOfFHJq7OO4nYecTvy0ur4I9D3Sxf%2Btn9DcXU8agDRJignB }",...
编辑: 似乎它以某种方式与缓存有关,但我不确定.在地图应用程序中加载相同的地图区域后,此问题会消失一段时间.
提前致谢
我calloutAccessoryControlTapped也叫我上标注视图只需轻按和这种行为是正确的.但是,我如何检测用户是否已经点击了正确的附件视图(在我的情况下是一个详细的公开按钮)而不仅仅是在视图中?
我添加了一个简单的检查,但它不起作用.
import UIKit
import MapKit
extension MapVC: MKMapViewDelegate, CLLocationManagerDelegate
{
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl)
{
if control == view.rightCalloutAccessoryView
{
... // enter here even if I tapped on the view annotation and not on button
}
}
}
Run Code Online (Sandbox Code Playgroud)