我正在使用MapKit显示用户相对于它们周围的引脚的位置.我希望能够通过屏幕左下角的十字准线按钮模仿地图提供的功能.我已经知道MapKit通过MKUserLocation提供了一个CLLocation对象和用户的位置,我只是想就如何关注该位置寻求建议.我最初的倾向是使用NSTimer将地图集中在每500ms左右的坐标上.
有一个更好的方法吗?是否有一些内置于MapKit中的东西,我将失踪,这将实现这一目标?
非常感谢,布兰登
我正在开发一个应用程序,它使用MKOverlay视图在Google基本地图上叠加我自己的自定义地图.我一直在使用Apple优秀的TileMap示例代码(来自WWDC 2010)作为指南.
我的问题 - 当"overzoomed"到比我生成的tile集更深的细节级别时,代码不会显示任何内容,因为在计算的Z级别上没有可用的tile.
我想要的行为 - 当"过度使用"应用程序应该只是继续放大最深层次的瓷砖.叠加层变得模糊是一种很好的用户体验 - 叠加层消失是一种非常糟糕的体验.
这是返回要绘制的图块的代码 - 我需要弄清楚如何修改它以限制Z深度,而不会破坏为叠加图块计算的帧的缩放.有什么想法吗???
- (NSArray *)tilesInMapRect:(MKMapRect)rect zoomScale:(MKZoomScale)scale
{
NSInteger z = zoomScaleToZoomLevel(scale);
// PROBLEM: I need to find a way to cap z at my maximum tile directory depth.
// Number of tiles wide or high (but not wide * high)
NSInteger tilesAtZ = pow(2, z);
NSInteger minX = floor((MKMapRectGetMinX(rect) * scale) / TILE_SIZE);
NSInteger maxX = floor((MKMapRectGetMaxX(rect) * scale) / TILE_SIZE);
NSInteger minY = floor((MKMapRectGetMinY(rect) * scale) / TILE_SIZE); …Run Code Online (Sandbox Code Playgroud) 我创建了一个注释,我将其添加到MKMapView中.如何使用自定义图像而不是标准红色针?
@interface AddressAnnotation : NSObject<MKAnnotation> {
CLLocationCoordinate2D coordinate;
NSString *title;
NSString *subtitle;
MKPinAnnotationColor pinColor;
}
@property (nonatomic,retain) NSString *title;
@property (nonatomic,retain) NSString *subtitle;
@property (nonatomic, assign) MKPinAnnotationColor pinColor;
@end
Run Code Online (Sandbox Code Playgroud) 当我的应用程序在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) 直到最近我才认为只有三个选项可以设置为MKMapView mapType.
[mapView setMapType:MKMapTypeStandard];
[mapView setMapType:MKMapTypeHybrid];
[mapView setMapType:MKMapTypeSatellite];
Run Code Online (Sandbox Code Playgroud)
但正如在这个链接中所提到的,如何在iphone中的地形视图中加载Google地图,还可以通过设置获得"地形类型(未在文档中提及)"
[mapView setMapType:3];
Run Code Online (Sandbox Code Playgroud)
有趣的是地形模式允许的最大放大率与其他native模式不同.而不是上面的3我尝试整数<3但这不起作用(MapView Standard只显示类型).有谁知道是否有更多的选项设置为类型MKMapView?
提前致谢.
背景
在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) 有什么方法可以MKMapView在iOS 6及更高版本中制作矢量图块并过度使用它们吗?我知道如何使用叠加图像MKOverlayView,但它们是光栅图像.
我在swift中遵循了Ray Wenderlich MapKit教程:http://www.raywenderlich.com/90971/introduction-mapkit-swift-tutorial ,当我创建Artwork类时,我得到了标题中写的错误.我不知道自己要做什么.这是代码:
class Artwork: NSObject, MKAnnotation {
let title: String
let locationName: String
let discipline: String
let coordinate: CLLocationCoordinate2D
init(title: String, locationName: String, discipline: String, coordinate: CLLocationCoordinate2D) {
self.title = title
self.locationName = locationName
self.discipline = discipline
self.coordinate = coordinate
super.init()
}
}
Run Code Online (Sandbox Code Playgroud)
请帮忙!
我正在地图应用程序中工作,该应用程序在地图上呈现折线.我在缩放时遇到问题,它会将先前的折线保留在图块上.
我试图强制重绘:
[self.mapView reloadInputViews];
[self.mapView.layer setNeedsDisplay];
[self.mapView setNeedsDisplay];
Run Code Online (Sandbox Code Playgroud)
我也尝试减慢变焦速度,但问题仍然存在:
[MKMapView animateWithDuration:2
delay:0
usingSpringWithDamping:0.6
initialSpringVelocity:10
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[self.mapView setVisibleMapRect:unionRectThatFits
edgePadding:UIEdgeInsetsMake(20, 10, 20, 10)
animated:YES];
}
completion: nil];
Run Code Online (Sandbox Code Playgroud)
有谁知道这个?
我有一个表格,用户可以在其中输入他们的地址。虽然他们总是可以手动输入,但我还想为他们提供一种具有自动完成功能的简单解决方案,以便他们可以开始输入地址,然后从列表中点击正确的地址并让它自动填充各个字段。
我首先使用 jnpdx 的 Swift5 解决方案 - /sf/answers/4699196351/
但是,有两个问题我似乎无法解决:
我需要将结果仅限于美国(不仅仅是美国大陆,而是整个美国,包括阿拉斯加、夏威夷和波多黎各)。我知道 MKCooperativeRegion 如何与中心点一起使用,然后缩放扩展,但它似乎不适用于地址搜索的结果。
结果的返回仅提供标题和副标题,我需要实际提取所有单独的地址信息并填充我的变量(即地址、城市、州、邮政编码和邮政编码分机号)。如果用户有公寓号或套房号,他们会自己填写。我的想法是创建一个在点击按钮时运行的函数,以便根据用户的选择分配变量,但我不知道如何提取所需的各种信息。苹果的文档一如既往地糟糕,我还没有找到任何解释如何做到这一点的教程。
这是针对最新的 SwiftUI 和 XCode (ios15+)。
我创建了一个用于测试的虚拟表单。这是我所拥有的:
import SwiftUI
import Combine
import MapKit
class MapSearch : NSObject, ObservableObject {
@Published var locationResults : [MKLocalSearchCompletion] = []
@Published var searchTerm = ""
private var cancellables : Set<AnyCancellable> = []
private var searchCompleter = MKLocalSearchCompleter()
private var currentPromise : ((Result<[MKLocalSearchCompletion], Error>) -> Void)?
override init() {
super.init()
searchCompleter.delegate = self
searchCompleter.region = MKCoordinateRegion()
searchCompleter.resultTypes = MKLocalSearchCompleter.ResultType([.address])
$searchTerm
.debounce(for: .seconds(0.5), scheduler: …Run Code Online (Sandbox Code Playgroud) mapkit ×10
ios ×7
iphone ×5
mkmapview ×3
objective-c ×2
cgcontext ×1
cocoa-touch ×1
ios10 ×1
ios7 ×1
ios9.1 ×1
mkannotation ×1
mkoverlay ×1
overlay ×1
quartz-2d ×1
swift ×1
swiftui ×1
tiles ×1
vector-tiles ×1