Hi. how do I change MKMapView annotation view? the...
# compose-ios
g
Hi. how do I change MKMapView annotation view? there is ver little docs and most of them are very old,, sometimes with objective-c code
Copy code
import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.UIKitInteropInteractionMode
import androidx.compose.ui.viewinterop.UIKitInteropProperties
import androidx.compose.ui.viewinterop.UIKitView
import dev.icerock.moko.geo.LatLng
import kotlinx.cinterop.ExperimentalForeignApi
import platform.CoreLocation.CLLocationCoordinate2DMake
import platform.MapKit.MKCoordinateRegionMakeWithDistance
import platform.MapKit.MKMapView
import platform.MapKit.MKPointAnnotation
import platform.UIKit.UIImage

@Composable
actual fun LocationVisualizer(modifier: Modifier, latLngState: LatLng) {
    val location = CLLocationCoordinate2DMake(latLngState.latitude, latLngState.longitude)
    val annotation = MKPointAnnotation(
        location,
        title = null,
        subtitle = null
    )

    annotation.setTitle("Your Location")

    UIKitView(
        factory = {
            MKMapView().apply {
                showsCompass = false
            }
        },
        modifier = modifier,
        update = {
            it.addAnnotation(annotation)
            it.setRegion(
                MKCoordinateRegionMakeWithDistance(
                    centerCoordinate = location,
                    10_000.0, 10_000.0
                ),
                animated = false
            )
            it.viewForAnnotation(annotation)?.apply {
                image = UIImage.imageNamed("custom_pin")
            }
        },
        properties = UIKitInteropProperties(
            interactionMode = UIKitInteropInteractionMode.NonCooperative
        )
    )
}
viewForAnnotation
sort of works but shows both my pin and red pin
Screenshot 2024-12-11 at 23.38.29.png
is there a way to only keep green pin?
nevermind guys fixed it
Copy code
MKMapView().apply {
                showsCompass = false
                delegate = object : MKMapViewDelegateProtocol, NSObject() {
                    override fun mapView(
                        mapView: MKMapView,
                        viewForAnnotation: MKAnnotationProtocol
                    ): MKAnnotationView? {
                        return mapView.dequeueReusableAnnotationViewWithIdentifier("pin")
                            ?: MKAnnotationView(viewForAnnotation, "pin").apply {
                                image = UIImage.imageNamed("custom_pin")
                            }
                    }
                }
            }
IDE complains about
Copy code
Return type is 'MKAnnotationView?', which is not a subtype of overridden public open expect fun mapView(mapView: MKMapView, didSelectAnnotation: MKAnnotationProtocol): Unit defined in platform. MapKit. MKMapViewDelegateProtoco
but code compiles anyway and works