Giorgi
12/11/2024, 7:37 PMGiorgi
12/11/2024, 7:37 PMimport 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
)
)
}
Giorgi
12/11/2024, 7:38 PMviewForAnnotation
sort of works but shows both my pin and red pinGiorgi
12/11/2024, 7:38 PMGiorgi
12/11/2024, 7:39 PMGiorgi
12/11/2024, 7:50 PMGiorgi
12/11/2024, 7:50 PMMKMapView().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")
}
}
}
}
Giorgi
12/11/2024, 7:51 PMReturn 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