@@ -5,13 +5,14 @@ import androidx.compose.runtime.Composable
55import androidx.compose.runtime.DisposableEffect
66import androidx.compose.runtime.remember
77import androidx.compose.ui.Modifier
8- import androidx.compose.ui.graphics.Color
9- import androidx.compose.ui.interop .UIKitView
8+ import androidx.compose.ui.viewinterop.UIKitInteropProperties
9+ import androidx.compose.ui.viewinterop .UIKitView
1010import kotlinx.cinterop.BetaInteropApi
1111import kotlinx.cinterop.CValue
1212import kotlinx.cinterop.ExperimentalForeignApi
1313import kotlinx.cinterop.ObjCObjectVar
1414import kotlinx.cinterop.alloc
15+ import kotlinx.cinterop.cValue
1516import kotlinx.cinterop.memScoped
1617import kotlinx.cinterop.ptr
1718import kotlinx.cinterop.useContents
@@ -33,9 +34,9 @@ import platform.AVFoundation.AVLayerVideoGravityResizeAspectFill
3334import platform.AVFoundation.AVMediaTypeVideo
3435import platform.AVFoundation.AVMetadataMachineReadableCodeObject
3536import platform.AVFoundation.AVMetadataObjectType
36- import platform.AVFoundation.AVMetadataObjectTypeQRCode
3737import platform.AudioToolbox.AudioServicesPlaySystemSound
3838import platform.CoreGraphics.CGRect
39+ import platform.CoreGraphics.CGRectZero
3940import platform.Foundation.NSError
4041import platform.QuartzCore.CALayer
4142import platform.QuartzCore.CATransaction
@@ -46,7 +47,6 @@ import platform.UIKit.UIView
4647import platform.darwin.NSObject
4748import platform.darwin.dispatch_get_main_queue
4849
49- @OptIn(ExperimentalForeignApi ::class )
5050@Composable
5151fun UiScannerView (
5252 modifier : Modifier = Modifier ,
@@ -72,24 +72,18 @@ fun UiScannerView(
7272 }
7373 }
7474
75- UIKitView (
75+ UIKitView < UIView > (
7676 modifier = modifier.fillMaxSize(),
77- background = Color .Black ,
7877 factory = {
79- val previewContainer = UIView ( )
78+ val previewContainer = ScannerPreviewView (coordinator )
8079 println (" Calling prepare" )
8180 coordinator.prepare(previewContainer.layer, allowedMetadataTypes)
8281 previewContainer
8382 },
84- update = {
85- },
86- onResize = { view, rect ->
87- CATransaction .begin()
88- CATransaction .setValue(true , kCATransactionDisableActions)
89- view.layer.setFrame(rect)
90- coordinator.setFrame(rect)
91- CATransaction .commit()
92- }
83+ properties = UIKitInteropProperties (
84+ isInteractive = true ,
85+ isNativeAccessibilityEnabled = true ,
86+ )
9387 )
9488
9589// DisposableEffect(Unit) {
@@ -101,6 +95,20 @@ fun UiScannerView(
10195
10296}
10397
98+ @OptIn(ExperimentalForeignApi ::class )
99+ class ScannerPreviewView (private val coordinator : ScannerCameraCoordinator ): UIView(frame = cValue { CGRectZero }) {
100+ @OptIn(ExperimentalForeignApi ::class )
101+ override fun layoutSubviews () {
102+ super .layoutSubviews()
103+ CATransaction .begin()
104+ CATransaction .setValue(true , kCATransactionDisableActions)
105+
106+ layer.setFrame(frame)
107+ coordinator.setFrame(frame)
108+ CATransaction .commit()
109+ }
110+ }
111+
104112@OptIn(ExperimentalForeignApi ::class )
105113class ScannerCameraCoordinator (
106114 val onScanned : (String ) -> Boolean
@@ -195,8 +203,6 @@ class ScannerCameraCoordinator(
195203 }
196204
197205 fun onFound (code : String ) {
198- // kSystemSoundID_UserPreferredAlert = 0x00001000
199- AudioServicesPlaySystemSound (0x1000u ) // Mail-Sound 1108 wäre der Photo Sound
200206 captureSession.stopRunning()
201207 if (! onScanned(code)) {
202208 GlobalScope .launch(Dispatchers .Default ) {
0 commit comments