我不是将它用于行车路线或类似用途。我有一些注释,并希望在用户靠近其中一个注释时触发,这样我就可以提醒用户。
似乎每个 startUpdatingLocation 调用只调用一次 didUpdateToLocation?至少当我在该方法中使用 NSLog 时,我在控制台中只得到一行。不,我不是带着 iphone 四处走动。
那么:设置对 userLocation 的持续监控并获得“回调”的正确方法是什么(在 3-4 秒过去或用户移动 10 米时)?
在GIKAnimatedCallout示例代码中,双击手势、两指点击手势、缩放手势和捏合手势都从 UITableView 传递到其下面的 MKMapView。我想阻止这一切发生。UITableView 内的触摸事件不应传递到 MKMapView。
我尝试为点击添加 UIGestureRecognizer,并将其设为空方法,但这些触摸事件仍会发送到 MKMapView 以及 UITableView。
通过调试器查看 UITableView 的超级视图层次结构,我发现 UITableView 是 MKMapView 的后代。
我真的不知道如何解决这个问题。任何指示表示赞赏。
我在 MapKit 上使用自定义标记
如何更改自定义标记上的图像宽度和高度?
我的代码:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
if (annotation is MKUserLocation) {
return nil
}
let reuseId = "test"
var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
if anView == nil {
anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
anView.image = UIImage(named:"x2.png")
anView.canShowCallout = true
}
else {
anView.annotation = annotation
}
return anView
}
Run Code Online (Sandbox Code Playgroud) 我正在MKLocalSearch搜索某些地方,例如城市或城市街道,以将其显示在MKMapView
我这样显示地标
let loc = placemark.location! //CLLocation of CLPlacemark
var mapRegion = MKCoordinateRegion()
mapRegion.center.longitude = loc.coordinate.longitude
mapRegion.center.latitude = loc.coordinate.latitude
mapRegion.span.latitudeDelta = 0.03 // I choose 0.03 by trying
mapRegion.span.longitudeDelta = 0.03
mapView.setRegion(mapRegion, animated: true)
Run Code Online (Sandbox Code Playgroud)
当地标是城市时,此方法效果很好,因为它以合理的缩放级别显示较大的区域。但是,当我想显示城市中的特定街道(即CLPlacemarks位置)时,它就很远。
现在,我正在寻找一种根据您的“详细信息”计算正确的跨度的方法CLPlacemark(请注意,您不知道CLPlacemark预付款的类型)
有没有办法做到这一点?
在以下方法中MKMapViewDelegate:
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "")
pinAnnotationView.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure)
pinAnnotationView.canShowCallout = true
return pinAnnotationView
}
Run Code Online (Sandbox Code Playgroud)
如果我像上面那样做,那么整个视图都是可点击的:
除此以外:
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "")
let accessoryView = UIButton(frame: CGRectMake(0, 0, 25, 25))
accessoryView.setImage(UIImage(named: "icon-menu"), forState: .Normal)
pinAnnotationView.rightCalloutAccessoryView = accessoryView
pinAnnotationView.canShowCallout = false
return pinAnnotationView
}
Run Code Online (Sandbox Code Playgroud)
只有右附件视图被点击,为什么?
问题是。怎么做才能使整体可点击
MKPinAnnotationView而不仅仅是正确的披露?
我在一个窗口中有一个MKMapView,并且pitchEnabled是真的(我已经在调试器中证实了这一点).指南针中间的"3D"东西是灰色的,点击或拖动它什么都不做.选项 - 拖动地图(就像我在Maps.app中所做的那样)也没有做任何事情.
根据我对文档的解释,设置pitchEnabled应该让我使用3D视图,就像Maps.app那样.我错了吗?我还需要做些什么来让我的用户获得3D地图视图吗?
我有两个类都符合MKAnnotation,我想知道,MapKit当用户缩小并显示所有注释时,有没有办法强制不聚集注释?
我正在尝试使用 swift 上的地图视图在我的当前位置和地图上显示一个蓝点。但是它没有显示我的位置,也没有显示蓝点我对我的代码非常肯定,但我无法显示它!应该是设置的问题吧?
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController {
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
let regionInMeters: Double = 1000
override func viewDidLoad() {
super.viewDidLoad()
checkLocationServices()
}
func setupLocationManager() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
}
func centerViewOnUserLocation() {
if let location = locationManager.location?.coordinate {
let region = MKCoordinateRegion.init(center: location, latitudinalMeters: regionInMeters, longitudinalMeters: regionInMeters)
mapView.setRegion(region, animated: true)
}
}
func checkLocationServices() {
if CLLocationManager.locationServicesEnabled() {
setupLocationManager()
checkLocationAuthorrization()
} else {
// Show …Run Code Online (Sandbox Code Playgroud) 我正在使用SwiftUI显示地图,如果用户点击了注释,它将在VStack中弹出详细视图。我已经制作了地图视图,并在另一个SwiftUI文件中插入了注释。我还做了详细视图。
如何在主视图文件中访问该地图的注释,以定义一个.tapaction,以便他们将其用于详细视图?
我尝试将视图定义为MKMapView,但无法在另一个SwiftUI视图中为UIViewRepresentable做到这一点。
主视图(ContentView)代码为:
struct ContentView: View {
@State private var chosen = false
var body: some View {
VStack {
MapView()
.edgesIgnoringSafeArea(.top)
.frame(height: chosen ? 600:nil)
.tapAction {
withAnimation{ self.chosen.toggle()}
}
if chosen {
ExtractedView()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
MapView代码为:
struct MapView : UIViewRepresentable {
@State private var userLocationIsEnabled = false
var locationManager = CLLocationManager()
func makeUIView(context: Context) -> MKMapView {
MKMapView(frame: .zero)
}
func updateUIView(_ view: MKMapView, context: Context) {
view.showsUserLocation = true
.
.
.
let sampleCoordinates …Run Code Online (Sandbox Code Playgroud) 我想在地图上画一条路线。
但结构不使用委托。
struct MapView : UIViewRepresentable {
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
}
Run Code Online (Sandbox Code Playgroud)
我能怎么做?
mapkit ×10
ios ×6
swift ×6
cocoa-touch ×2
swiftui ×2
iphone ×1
macos ×1
mkannotation ×1
userlocation ×1
xcode11 ×1