我正在编写一个应用程序,它在大部分屏幕上显示一个简单的Apple Map.但是,当我比较滚动速度时,与iOS 6附带的原生Apple Maps相比,显着减慢了速度.
在我调查原因时,我注意到Facebook App(也使用Apple Maps),同样的性能打击存在.
这在使用iOS 6的iPhone 4上最为明显.
有谁知道我需要采取的与视图相关的特殊性能增强步骤或一组步骤来提高性能?我希望我的地图像Apple Maps应用程序一样流畅.
我有一个注释列表(MKPointAnnotation).我有一个UIViewController这是整个视图,执行的MKMapView控制,我认为是用于检测与地图,告诉您如何显示注释的用户互动,我自己MKPointAnnotation实现(子类)控制器有用.
然而,我对用户检测到轻敲事件感到震惊.
谷歌搜索告诉我,我必须通过实现以下功能来做一些事情.
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
Run Code Online (Sandbox Code Playgroud)
而且我必须在一些实现MapViewDelegate(协议)的类中实现它.
但我很困惑,无法前进.谁能告诉我在哪做什么?
抱歉所有的大惊小怪!
如何使用MapKit从坐标获取地址?
当我在地图上长按它获取坐标时,我有这个代码:
func didLongPressMap(sender: UILongPressGestureRecognizer) {
if sender.state == UIGestureRecognizerState.Began {
let touchPoint = sender.locationInView(self.mapView)
let touchCoordinate = self.mapView.convertPoint(touchPoint, toCoordinateFromView: self.mapView)
var annotation = MKPointAnnotation()
annotation.coordinate = touchCoordinate
annotation.title = "Your position"
self.mapView.addAnnotation(annotation) //drops the pin
println("lat: \(touchCoordinate.latitude)")
var num = (touchCoordinate.latitude as NSNumber).floatValue
var formatter = NSNumberFormatter()
formatter.maximumFractionDigits = 4
formatter.minimumFractionDigits = 4
var str = formatter.stringFromNumber(num)
println("long: \(touchCoordinate.longitude)")
var num1 = (touchCoordinate.longitude as NSNumber).floatValue
var formatter1 = NSNumberFormatter()
formatter1.maximumFractionDigits = 4
formatter1.minimumFractionDigits = 4
var str1 = formatter1.stringFromNumber(num1) …Run Code Online (Sandbox Code Playgroud) 我试图在iOS7应用程序中创建MKMapView的快照,就像之前iOS版本推荐的那样:
- (UIImage*) renderMapViewToImage
{
UIGraphicsBeginImageContextWithOptions(mapView.frame.size, NO, 0.0);
[mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
Run Code Online (Sandbox Code Playgroud)
但是,返回的图像是一个黑色矩形,顶部有一个蓝色的当前位置点.我也试过使用mapView的不同子层,但结果总是一样的.
有谁知道如何在iOS7中拍摄MKMapView快照?
根据Apple文档,MKPinAnnotationView的针脚颜色有红色,绿色和紫色可供选择.有没有办法得到其他颜色?我在文档中找不到任何内容.
我仍然对iOS的东西很新,并且在测试我们的App for iOS 8兼容性时发现了一个问题.在iOS 7中一切正常,但在iOS 8上,rightCalloutAccessoryView在某些情况下未对齐.
第一个截图:正确对齐 
第二个屏幕截图:错误对齐 
如您所见,当InfoWindow具有较长的标题时会发生问题.但是在iOS 7上并非如此,我找不到任何提及这已经发生变化的事情?
我试图理解为什么并找到解决这个问题的方法,但还找不到任何东西.这是我们自己可以解决的还是我们必须为Apple提出问题?
任何帮助/想法都会受到高度赞赏,因为我对这个问题有点过分挑战.
添加MKAnnotationViews的代码
- (MKAnnotationView *)viewForStation:(id<MKAnnotation>)annotation {
static NSString *stationIdentifier = @"stao";
MKAnnotationView *annotationView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:stationIdentifier];
if (annotationView == nil) {
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:stationIdentifier];
annotationView.image = [UIImage bundleImageNamed:PIN_IMAGE];
annotationView.canShowCallout = YES;
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
}
return annotationView;
}
Run Code Online (Sandbox Code Playgroud)
您可能感兴趣,我(刚才)也将此问题添加到apple.developer.com上的iOS 8 Beta部分:https://devforums.apple.com/thread/242282 ? tstart = 0
如果我在这里或在apple.developer.com上得到答案,我会反映它,以便我们可以在两个网站上找到它
我的地图中有几个MKAnnotations(及其相应的视图),有时会非常拥挤.现在,我的应用程序中的注释有两种形式:一些注定要保持原样,而另一些则会随着时间的推移而移动.我希望在背景中有视觉上更稳定的,而移动的那些总是在它们前面传递.
也许会想到,最近添加到地图中的注释会最终到达前面(或者至少在最后面),但这似乎不是规则.据我所知,我首先创建并添加所有非移动注释,然后添加一些新实例化的移动注释,但其中许多(尽管不是全部!)最终都是在永久存货的情况下绘制的.
有趣的是,当时间流逝,然而创建新的移动注释时,它们倾向于更多地倾向于顶部而不是第一个 - 即使所有移动的注释对象仅在非移动部分已经添加到地图之后才创建.
有没有人知道改变地图上注释视图的奇怪自然顺序的技巧?我试图搜索Map Kit API,但它似乎没有提到这样的事情.
是否可以移动MKAnnotation的坐标而无需在地图中添加和删除注释?
从iOS 7到8,我的代码运行良好.昨天更新了我的引脚上的自定义图像被标准引脚图像替换.有什么建议?
我的代码:
extension ViewController: MKMapViewDelegate {
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView! {
if annotation is MKUserLocation {
return nil
}
let reuseId = String(stringInterpolationSegment: annotation.coordinate.longitude)
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
if pinView == nil {
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView!.canShowCallout = true
pinView!.image = getRightImage(annotation.title!!)
}
let button = UIButton(type: UIButtonType.DetailDisclosure)
pinView?.rightCalloutAccessoryView = button
return pinView
}
}
Run Code Online (Sandbox Code Playgroud)
获取图像的函数UIImage根据名称返回:
func getRightImage (shopName:String)-> UIImage{
var correctImage = UIImage()
switch shopName
{
case …Run Code Online (Sandbox Code Playgroud) 想要将MKMapView置于给定引脚下方的N个像素点(在当前MapRect中可能会或可能不会显示).
我一直试图用各种戏剧解决这个问题但-(CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view没有成功.
任何人都走在这条路上(没有双关语)?

mapkit ×10
ios ×6
mkmapview ×4
objective-c ×4
iphone ×3
mkannotation ×2
clgeocoder ×1
clplacemark ×1
cocoa-touch ×1
ios6 ×1
ios7 ×1
ios8 ×1
ios9 ×1
performance ×1
swift ×1