@@ -3,24 +3,54 @@ package com.multiplatform.lifecyle
33import androidx.compose.ui.uikit.ComposeUIViewControllerDelegate
44import com.multiplatform.lifecycle.LifecycleEvent
55import com.multiplatform.lifecycle.LifecycleTracker
6+ import kotlinx.cinterop.ExperimentalForeignApi
7+ import platform.Foundation.NSNotificationCenter
8+ import platform.Foundation.NSNotificationName
9+ import platform.Foundation.NSSelectorFromString
10+ import platform.UIKit.UIApplicationDidBecomeActiveNotification
11+ import platform.UIKit.UIApplicationDidEnterBackgroundNotification
12+ import platform.UIKit.UIApplicationWillEnterForegroundNotification
13+ import platform.UIKit.UIApplicationWillResignActiveNotification
14+ import platform.UIKit.UIApplicationWillTerminateNotification
615
716/* *
817 * Created By Kevin Zou On 2024/2/22
918 */
10- class LifecycleComposeUIVCDelegate (private val lifecycleTracker : LifecycleTracker ) : ComposeUIViewControllerDelegate {
19+ class LifecycleComposeUIVCDelegate (private val lifecycleTracker : LifecycleTracker ) :
20+ ComposeUIViewControllerDelegate {
21+
22+ private val nsLifecycleListener = NSLifecycleListener (lifecycleTracker)
23+
24+ @OptIn(ExperimentalForeignApi ::class )
25+ fun addObserver (name : NSNotificationName , selectorName : String ) {
26+ NSNotificationCenter .defaultCenter.addObserver(
27+ nsLifecycleListener,
28+ selector = NSSelectorFromString (" $selectorName :" ),
29+ name = name,
30+ `object ` = null ,
31+ )
32+ }
33+
34+ private fun addLifecycleObservers () {
35+ addObserver(UIApplicationWillEnterForegroundNotification , " willEnterForeground" )
36+ addObserver(UIApplicationDidBecomeActiveNotification , " didBecomeActive" )
37+ addObserver(UIApplicationWillResignActiveNotification , " willResignActive" )
38+ addObserver(UIApplicationDidEnterBackgroundNotification , " didEnterBackground" )
39+ addObserver(UIApplicationWillTerminateNotification , " willTerminate" )
40+ }
41+
1142 override fun viewDidAppear (animated : Boolean ) {
1243 super .viewDidAppear(animated)
13- lifecycleTracker.notifyListeners(LifecycleEvent .OnResumeEvent )
1444 }
1545
1646 override fun viewDidDisappear (animated : Boolean ) {
1747 super .viewDidDisappear(animated)
1848 lifecycleTracker.notifyListeners(LifecycleEvent .OnStopEvent )
19- lifecycleTracker.notifyListeners(LifecycleEvent .OnDestroyEvent )
2049 }
2150
2251 override fun viewDidLoad () {
2352 super .viewDidLoad()
53+ addLifecycleObservers()
2454 lifecycleTracker.notifyListeners(LifecycleEvent .OnCreateEvent )
2555 }
2656
0 commit comments