在UIViewController中,我将MKMapView添加到控制器控制的视图中.
- (void)viewDidLoad {
[super viewDidLoad];
CGRect rect = CGRectMake(0, 0, 460, 320);
map = [[MKMapView alloc] initWithFrame:rect];
map.delegate = self;
[self.view addSubview:map];
}
Run Code Online (Sandbox Code Playgroud)
后来我在控制器中
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
NSLog(@"done.");
}
Run Code Online (Sandbox Code Playgroud)
完成永远不会被打印.其他任何委托方法都不像mapView一样调用:viewForAnnotation:我在另一个应用程序中使用MKMapView,但这似乎发生在我制作的任何新应用程序上.有没有人见过这种行为?
编辑:
问题似乎是当UIViewController成为MKMapView的委托时,NSObject的直接子类似乎工作正常.我可以像这样解决这个问题,因为我之前已经做过,所以看起来仍然很奇怪.
我有MKMapView一个注册代表,所以我可以听区域更改事件(特别是regionDidChangeAnimated).我正在寻找一种可靠的方法来判断区域更改事件是否是用户拖动地图或编程setRegion:请求的结果.
我的目标是拥有一个基于位置跟踪自动居中地图的应用程序,除非用户手动平移地图,此时自动居中将关闭.因此,我正在调用setRegion:以适当地重新定位地图视图,但是我很难regionDidChangeAnimated:确定对委托的结果调用是编程还是来自用户泛.我已经尝试过将某些东西放在一起,但是当用户开始平移时,我会继续遇到竞争条件,就像位置更新一样.
任何人都可以使用MapKit框架提供在OS 4.0中实现可拖动引脚的任何示例代码/指令吗?
当我的应用程序在iPhone上运行时,我发生间歇性崩溃.所有崩溃都是相同的,并以某种方式涉及MKMapView Overlays(MKCircleViews).
从典型的iPhone 4s崩溃报告:
报告标题:
Hardware Model: iPhone4,1
Process: EL-GPS-01 [1021]
Path: /var/mobile/Applications/61288E15-74B5-45B9-99A9-E0B58C767816/EL-GPS-01.app/EL-GPS-01
Identifier: EL-GPS-01
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2011-11-22 15:59:41.065 +0000
OS Version: iPhone OS 5.0.1 (9A405)
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Crashed Thread: 6
Run Code Online (Sandbox Code Playgroud)
崩溃的线程:
Thread 6 name: Dispatch queue: com.apple.root.default-priority
Thread 6 Crashed:
0 ??? 0000000000 0 + 0
1 CoreGraphics 0x319a87c2 0x31967000 + 268226
2 CoreGraphics 0x3199a9e6 0x31967000 + 211430
3 …Run Code Online (Sandbox Code Playgroud) 在iOS 5中,有一种转发地理编码地址的新方法(将地址转换为1 Infinite Loop,CA,USA到lat/lang地址).关于这方面的更多信息在这里.
有人试图将前向地理编码的CLPlacemark对象放在MKMapView上吗?我在地理编码后有一个CLPlacemark对象,但不知道如何将它放在地图上.
我会很感激任何类型的帮助.到目前为止谷歌没有任何帮助.
iOS 5改变了内置Google Maps App绘制路线的方式:

我现在想在我自己的应用程序中复制路径叠加的设计,但我目前只能绘制一条纯蓝线.我想添加渐变,边框和发光的3D效果.有关如何实现这一目标的任何想法?
目前我正在使用以下代码:
CGContextSetFillColorWithColor(context, fillColor.CGColor);
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, lineWidth);
CGContextAddPath(context, path);
CGContextReplacePathWithStrokedPath(context);
CGContextFillPath(context);
Run Code Online (Sandbox Code Playgroud)
导致一条相当难看的线:

谢谢!
更新:该解决方案应适用于iOS 4.0及更高版本.
背景
在iOS6中,我曾经MKPolygon在MKMapView上添加了几个(覆盖)并提供了特定MKOverlayView的mapView:viewForOverlay:回调(参见MKMapViewDelegate类参考).这个特定视图的工作是使用Quartz 2D用自定义图案填充多边形.它做得很好.
现在,这似乎不再像以前那样在iOS7上运行了.
因为mapView:viewForOverlay:在iOS SDK7 MKOverlayView及其子类中已弃用,我尝试切换到mapView:rendererForOverlay:子类并且MKOverlayRenderer没有成功:遇到的问题是相同的.
因此,以下示例代码将使用MKOverlayView,但您可以在下面的代码中轻松地使用渲染器/渲染器替换视图/视图,并获得相同的效果.
遇到问题
我已将问题减少到能够重现它的最小代码示例,结果如下:
在iOS6上(正如预期的那样):

在iOS7上(不是预期的):

我希望我的多边形填充,总是使用相同的模式,并且模式的大小在屏幕上保持不变,与地图的缩放级别无关.
唉,在iOS7上,当在地图上添加多个叠加时,屏幕上的图案尺寸会减小,同时缩小多边形的某些部分.只有在以最大缩放级别放大时,图案才会获得正确的尺寸.
问题没有出现:
mapView:insertOverlay:atIndex:)即使只添加了一个图案覆盖层以及其他未图案化的覆盖层,问题似乎也会发生.
代码示例
MTViewController.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
@interface MTViewController : UIViewController<MKMapViewDelegate>
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@end
Run Code Online (Sandbox Code Playgroud)
MTViewController.m
#import "MTViewController.h"
#import <MapKit/MapKit.h>
#import "MTPolygonWithPatternOverlayView.h"
@implementation MTViewController
- (void)dealloc {
self.mapView.delegate = nil;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; …Run Code Online (Sandbox Code Playgroud) 是否有任何公共iOS 8 API可用于实现3D天桥或至少3D视图,如下面的Apple Maps App屏幕截图所示?

更新
经过以下建议我已经完成了以下代码:
import UIKit
import MapKit
class ViewController: UIViewController {
@IBOutlet weak var mapView: MKMapView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
mapView.showsBuildings = true
let eiffelTowerCoordinates = CLLocationCoordinate2DMake(48.85815,2.29452)
mapView.region = MKCoordinateRegionMakeWithDistance(eiffelTowerCoordinates, 1000,100)
mapView.mapType = MKMapType.Standard
// 3D Camera
let mapCamera = MKMapCamera()
mapCamera.centerCoordinate = eiffelTowerCoordinates
mapCamera.pitch = 45
mapCamera.altitude = 500
mapCamera.heading = 45
// Set MKmapView camera property
self.mapView.camera = mapCamera
} …Run Code Online (Sandbox Code Playgroud) 我是Swift的新手,我遵循了这个教程:http://www.raywenderlich.com/90971/introduction-mapkit-swift-关于MapKit的教程.问题是我在这行代码上遇到了错误
let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDict)
Run Code Online (Sandbox Code Playgroud)
标题上描述了错误.包含此行的方法是:
func mapItem() -> MKMapItem {
let addressDict = [String(kABPersonAddressStreetKey): self.subtitle]
let placemark = MKPlacemark(coordinate: self.coordinate, addressDictionary: addressDict)
let mapItem = MKMapItem(placemark: placemark)
mapItem.name = self.title
return mapItem
}
Run Code Online (Sandbox Code Playgroud)
请帮忙.
我目前使用MapKit的MKLocalSearchCompleter为用户提供搜索我的iOS应用程序的位置自动完成一样的功能,但是我正在与我找回结果一些严重的问题.更具体地说,我的应用程序正在处理纽约中部及周边地区的位置信息,我正在努力将结果提供给纽约州内的地点/地址.但由于某种原因,在大多数情况下输入一个单词会产生远离澳大利亚的结果.
MKLocalSearchCompleter提供了一个region属性,用于影响对象返回指定区域附近的结果,但即便如此也没有多大帮助.
还有什么我可以做的吗?或者我应该考虑退出并转移到Google的Maps API吗?我知道Apple Maps因质量低劣而臭名昭着,但我不认为在告诉他们的API坚持纽约之后我只会在德克萨斯州和澳大利亚获得位置结果...
mapkit ×10
ios ×7
iphone ×5
mkmapview ×4
apple-maps ×1
cgcontext ×1
cocoa-touch ×1
drag ×1
draggable ×1
drawrect ×1
ios5 ×1
ios7 ×1
objective-c ×1
quartz-2d ×1
swift ×1