Skip to content

Commit 85afca8

Browse files
authored
CMP-7095: migrate ios camera example to use interop UiView (#5166)
https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-ios-migration.html#onresize-parameter-removed <!-- Optional --> Fixes https://youtrack.jetbrains.com/issue/CMP-7095/blank-camera-preview-screen-with-UIKitView-and-AVCaptureVideoPreviewLayer ## Testing <!-- Optional --> Describe how you tested your changes. If possible and needed: - I tested in on my iPhone mini 13 as described in the "how to reproduce" section of the ticket.
1 parent fc7e903 commit 85afca8

File tree

1 file changed

+13
-13
lines changed
  • examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view

1 file changed

+13
-13
lines changed

examples/imageviewer/shared/src/iosMain/kotlin/example/imageviewer/view/CameraView.ios.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@ import androidx.compose.runtime.*
88
import androidx.compose.ui.Alignment
99
import androidx.compose.ui.Modifier
1010
import androidx.compose.ui.graphics.Color
11-
import androidx.compose.ui.interop.UIKitView
1211
import androidx.compose.ui.unit.dp
12+
import androidx.compose.ui.viewinterop.UIKitView
1313
import example.imageviewer.IosStorableImage
1414
import example.imageviewer.PlatformStorableImage
1515
import example.imageviewer.createNewPhotoNameAndDescription
1616
import example.imageviewer.icon.IconPhotoCamera
1717
import example.imageviewer.model.GpsPosition
1818
import example.imageviewer.model.PictureData
1919
import example.imageviewer.model.createCameraPictureData
20-
import kotlinx.cinterop.CValue
2120
import kotlinx.cinterop.ExperimentalForeignApi
2221
import kotlinx.cinterop.ObjCAction
22+
import kotlinx.cinterop.readValue
2323
import kotlinx.cinterop.useContents
2424
import platform.AVFoundation.*
2525
import platform.AVFoundation.AVCaptureDeviceDiscoverySession.Companion.discoverySessionWithDeviceTypes
2626
import platform.AVFoundation.AVCaptureDeviceInput.Companion.deviceInputWithDevice
27-
import platform.CoreGraphics.CGRect
27+
import platform.CoreGraphics.CGRectZero
2828
import platform.CoreLocation.CLLocation
2929
import platform.CoreLocation.CLLocationManager
3030
import platform.CoreLocation.kCLLocationAccuracyBest
@@ -228,22 +228,22 @@ private fun BoxScope.RealDeviceCamera(
228228
}
229229
}
230230
UIKitView(
231-
modifier = Modifier.fillMaxSize(),
232-
background = Color.Black,
231+
modifier = Modifier.fillMaxSize().background(Color.Black),
233232
factory = {
234-
val cameraContainer = UIView()
233+
val cameraContainer = object: UIView(frame = CGRectZero.readValue()) {
234+
override fun layoutSubviews() {
235+
CATransaction.begin()
236+
CATransaction.setValue(true, kCATransactionDisableActions)
237+
layer.setFrame(frame)
238+
cameraPreviewLayer.setFrame(frame)
239+
CATransaction.commit()
240+
}
241+
}
235242
cameraContainer.layer.addSublayer(cameraPreviewLayer)
236243
cameraPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
237244
captureSession.startRunning()
238245
cameraContainer
239246
},
240-
onResize = { view: UIView, rect: CValue<CGRect> ->
241-
CATransaction.begin()
242-
CATransaction.setValue(true, kCATransactionDisableActions)
243-
view.layer.setFrame(rect)
244-
cameraPreviewLayer.setFrame(rect)
245-
CATransaction.commit()
246-
},
247247
)
248248
CircularButton(
249249
imageVector = IconPhotoCamera,

0 commit comments

Comments
 (0)