我正在为iPhone构建一个基于MapKit的应用程序.
我在地图上添加了许多MKPolylines.
但是,我想让我自己的Model类符合添加到地图中的MKOverlay协议,而不是拥有MKPolyline,这样我就可以在mapView:viewForOverlay中创建相应的视图时访问模型属性.
问题是我无法找到从MKPolyline继承的方法,因为它没有我可以从子类'init调用的任何init方法.您只能使用便捷方法创建它们.
如何将模型属性和MKPolyline行为结合在一起?
我试图找到Mapkit上两个位置之间的路径.我只有两个地方.现在我必须找到这些点之间的确切路径,并使用MapKit在这些点之间画一条线.我已经通过几个他们使用.csv文件的例子.在该.csv文件中,他们根据这些值存储了完整路径和绘图线的纬度和经度值.
但在这里,我试图在不知道路径的情况下绘制一条线.那么有没有办法动态地找到路径并画一条线?
我在Path风格的视差表视图标题中显示MKMapView.要创建效果,mapView边界大于用户可见的区域.我需要设置地图视图区域,以便所有地图的注释都包含在MKMapView的可见矩形中.最好的方法是什么?

为清晰起见编辑:这是一个用例.mapView大小为320 x 380.但是,可见区域由rect(0.0,20.0,320.0,100.0)定义.我需要设置区域,以便所有注释都出现在mapView中的此rect中.
我的Swift-iOS应用程序旨在显示用户在地图上的位置.但是,XCode调试控制台告诉我,我需要请求权限才能显示用户的位置.我想,我这样做,但对话永远不会出现.
这是错误消息,在我调用的ViewController下面 CLLocationManager::requestWhenInUseAuthorization()
错误:
2014-06-30 21:25:13.927 RowingTracker2 [17642:1608253]尝试在不提示位置授权的情况下启动MapKit位置更新.必须首先调用 - [CLLocationManager requestWhenInUseAuthorization]或 - [CLLocationManager requestAlwaysAuthorization].
视图控制器:
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet var mapview: MKMapView = nil
var locationmgr : CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationmgr = CLLocationManager()
locationmgr.requestWhenInUseAuthorization()
mapview.showsUserLocation = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Run Code Online (Sandbox Code Playgroud)
如何申请授权使用该位置?你可以在这里 …
我正在传递地图的选项,但这似乎与缩放级别没有任何关系?它保持相同的低缩放级别.我错过了什么?
func openMapForPlace() {
let regionDistance:CLLocationDistance = 10000
var coordinates = CLLocationCoordinate2DMake(detailItem!.geoLatitude, detailItem!.geoLongitude)
let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance)
var options = [
MKLaunchOptionsMapCenterKey: NSValue(MKCoordinate: regionSpan.center),
MKLaunchOptionsMapSpanKey: NSValue(MKCoordinateSpan: regionSpan.span)
]
var placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil)
var mapItem = MKMapItem(placemark: placemark)
mapItem.name = detailItem!.cityName
mapItem.openInMapsWithLaunchOptions(options)
}
Run Code Online (Sandbox Code Playgroud) 我想做动画,例如"在滚动collection view cell结束时滚动注释引脚向上/向下滚动.但是当滚动结束时,如何开始滚动时注释引脚等动画上升,注释引脚变为向下collection view
//code --> For Scrolling
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
if scrollView == collectionView {
NSLog("page collection %d",Int(scrollView.contentOffset.x/scrollView.frame.size.width))
self.UpdateMapAnotationPin(Int(scrollView.contentOffset.x/scrollView.frame.size.width))
}
}
// -->When Update Pin
func UpdateMapAnotationPin(vIndex : Int) {
if self.mapAnnotations.count != 0 {
let info = self.mapAnnotations[vIndex]
let aView = map.viewForAnnotation(info)
info.imageName = "ic_map_pin1"
info.tagPin = vIndex
aView?.image = UIImage(named: info.imageName)
if aView != nil {
self.animationWithView(aView!)
}
}
}
// --> For animation
func animationWithView(mkView : MKAnnotationView) {
let point:MKMapPoint = MKMapPointForCoordinate(mkView.annotation!.coordinate); …Run Code Online (Sandbox Code Playgroud) 我们的 Flutter 应用程序使用 Google 地图(如果可用)或使用本地浏览器显示多个位置。
虽然我们之前已经为 iOS 上传了一个被苹果接受并成功发布在 App Store 的二进制代码,但现在我们添加了更多位置并因此尝试发布新版本,苹果拒绝了我们的二进制文件,并表示它必须使用“Apple Maps”而不是任何以“G”开头的东西,比如谷歌......
拒绝消息如下:
您的应用程序的位置功能未与内置地图功能集成,这会将用户限制为第三方地图应用程序。
下一步
要解决此问题,请修改您的应用程序,让用户可以选择启动本机 Apple Maps 应用程序。
我发现存在一些关于名为MapKit JS的 Javascript 库的文档,它正好用于与Apple Maps交互的目的:https : //developer.apple.com/maps/mapkitjs/
<script src="https://cdn.apple-mapkit.com/mk/5.x.x/mapkit.js"></script>
<script>
mapkit.init({
authorizationCallback: function(done) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "/services/jwt");
xhr.addEventListener("load", function() {
done(this.responseText);
});
xhr.send();
}
});
var Cupertino = new mapkit.CoordinateRegion(
new mapkit.Coordinate(37.3316850890998, -122.030067374026),
new mapkit.CoordinateSpan(0.167647972, 0.354985255)
);
var map = new mapkit.Map("map");
map.region = …Run Code Online (Sandbox Code Playgroud) 我尝试创建我的地图视图的快照以供稍后显示,因此我没有另一个地图视图浪费内存。
大多数情况下它工作得很好,但最近我尝试创建巴黎的快照并得到错误:“连接到名为 com.apple.MapKit.SnapshotService 的服务”。
我知道它看起来像是剪掉了一部分,但不,这似乎是整个错误描述。
完整错误:
错误域=MKErrorDomain 代码=1 "(null)" UserInfo=。{NSUnderlyingError=0x284562610 {Error Domain=NSCocoaErrorDomain Code=4097“连接到名为 com.apple.MapKit.SnapshotService 的服务” UserInfo={NSDebugDescription=连接到名为 com.apple.MapKit.SnapshotService 的服务}}}
我已经尝试过多次,但似乎在拍摄巴黎的快照时,它永远不会像其他城市那样奏效。我真的不知道从哪里开始解决问题,因为我没有找到任何关于我的错误来源的信息。
编辑:这种行为实际上在其他城市也似乎是随机的。
在 viewDidLoad 中,我像这样初始化我的选项对象:
snapShotOptions.size = mapView.frame.size
snapShotOptions.scale = UIScreen.main.scale
snapShotOptions.showsBuildings = false
Run Code Online (Sandbox Code Playgroud)
When the user now decides to go on, I initialize & start the snapshotter and handle data accordingly, before that I also set the region for the snapshot:
snapShotOptions.region = mapView.region
snapShotter = MKMapSnapshotter(options: snapShotOptions)
// Take a snapshot.
snapShotter.start { (snapshot, error) -> Void in
if error …Run Code Online (Sandbox Code Playgroud) 我尝试在 SwiftUI 应用程序中处理 Map UIKit 组件手势。Xcode 显示此警告:“字符串文字不是有效的 Objective-C 选择器”
// Binding to UIKit component
import SwiftUI
import MapKit
struct MapView: UIViewRepresentable {
class Coordinator: NSObject, MKMapViewDelegate {
@Binding var selectedPin: MapPin?
init(selectedPin: Binding<MapPin?>) {
self._selectedPin = selectedPin
}
func mapView(_ mapView: MKMapView,
didSelect view: MKAnnotationView) {
guard let pin = view.annotation as? MapPin else {
return
}
pin.action?()
selectedPin = pin
}
func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
guard (view.annotation as? MapPin) != nil else {
return
} …Run Code Online (Sandbox Code Playgroud) 我想实现一个基本的地图视图,当用户点击按钮时,该视图将以用户位置为中心,类似于 Apple 地图应用程序。我尝试了以下操作,但每当我点击按钮时,[SwiftUI] Modifying state during view update, this will cause undefined behavior.都会在控制台中打印。在我看来,更新tracking状态变量导致了错误。但是,我不确定状态变量还有什么用途。尽管打印了错误,但应用程序确实按预期运行。有谁有这方面的经验或知道可能出了什么问题?
struct ContentView: View {
@State var region: MKCoordinateRegion = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: 47.3769, longitude: 8.5417), latitudinalMeters: 2000, longitudinalMeters: 2000)
@State var tracking = MapUserTrackingMode.follow
var body: some View {
ZStack {
Map(coordinateRegion: $region, interactionModes: .all, showsUserLocation: true, userTrackingMode: $tracking)
.ignoresSafeArea()
.task {
let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization();
}
Button {
tracking = .follow
} label: {
Image(systemName: tracking == .follow ? "location.fill" : "location") …Run Code Online (Sandbox Code Playgroud)