使用Swift在Mapbox中为弹出窗口(Speech Bubble)创建按钮

Sam*_*Sam 5 iphone ios mapbox swift

我用相同的代码发布了另一个问题,但这个问题有所不同.

我想在显示的语音气泡的右下角添加按钮

Hello World! 
Welcome to my marker!
Run Code Online (Sandbox Code Playgroud)

我想知道如何将按钮放在那里,但是如果你想知道按钮会做什么,其中一个会跟踪其他用户泡泡获得多少赞成,另一个会向另一个用户发送请求.

此外,我发现这个示例看起来像是实现了一个可能更好使用的不同版本的语音气泡(弹出窗口)

import Mapbox

class ViewController: UIViewController, MGLMapViewDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()

        let mapView = MGLMapView(frame: view.bounds)
        mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

        // Set the map’s center coordinate and zoom level.
        mapView.setCenter(CLLocationCoordinate2D(latitude: 40.7326808, longitude: -73.9843407), zoomLevel: 12, animated: false)
        view.addSubview(mapView)

        // Set the delegate property of our map view to `self` after instantiating it.
        mapView.delegate = self

        // Declare the marker `hello` and set its coordinates, title, and subtitle.
        let hello = MGLPointAnnotation()
        hello.coordinate = CLLocationCoordinate2D(latitude: 40.7326808, longitude: -73.9843407)
        hello.title = "Hello world!"
        hello.subtitle = "Welcome to my marker"

        // Add marker `hello` to the map.
        mapView.addAnnotation(hello)
    }

    // Use the default marker. See also: our view annotation or custom marker examples.
    func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
        return nil
    }

    // Allow callout view to appear when an annotation is tapped.
    func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是我希望我的预期输出看起来像近似

在此输入图像描述

小智 4

如果您想使用内置的 Mapbox 标注,您可能需要考虑实现-mapView:rightCalloutAccessoryViewForAnnotation: 委托方法,该方法允许您进一步自定义 MGLCallout,如下例所示: https: //www.mapbox.com/ios-sdk/maps/示例/默认标注/。该委托方法返回一个 UIView,因此您可以自定义 UIView,但您希望包含所需的按钮。

您会注意到示例中-mapView:annotation:calloutAccessoryControlTapped:还实现了另一个委托方法。当选择正确的标注附件视图(由 返回-mapView:rightCalloutAccessoryViewForAnnotation:)时,将调用此方法,因此当用户选择标注视图的右侧时,您可以通过将逻辑放入该委托方法中来调整此方法。