当前位置: 首页 > news >正文

网站开发及服务器总共多少钱网络营销策略包括哪四种

网站开发及服务器总共多少钱,网络营销策略包括哪四种,网页模板在线设计,海城seo网站排名优化推广前言 类似于 Android 上的 compose#xff0c;在 iOS 上的 compose 同样支持嵌套显示 compose UI 和 swiftUI 或是 uikit 。 但是不同于 Android 原生就是使用 kotlin 作为开发语言#xff0c;iOS 的开发语言是 swift 或者 object-c 。虽然大多数业务逻辑都可以直接使用 ko…前言 类似于 Android 上的 compose在 iOS 上的 compose 同样支持嵌套显示 compose UI 和 swiftUI 或是 uikit 。 但是不同于 Android 原生就是使用 kotlin 作为开发语言iOS 的开发语言是 swift 或者 object-c 。虽然大多数业务逻辑都可以直接使用 kotlin 实现但是有时候有些逻辑无法直接使用 kotlin 实现必须调用 iOS 原生代码例如关于 iOS 原生平台的 API。 因此本文将以实际项目为例说明如何在 Compose for iOS 实现业务逻辑的互操作。 swift 调用 kotlin 没错这次又双叒用 calculator-Compose-MultiPlatform 项目举例子哈哈哈谁叫我现在手头就这个完整的跨平台项目呢而且恰好上次移植这个项目支持 iOS 时留下了一些关于 iOS 平台未解决的问题正好这次一并解决了。 关于这个项目第一个要解决的问题就是需要监听屏幕的旋转事件当监听到屏幕旋转时动态的改变当前显示键盘为标准键盘或程序员键盘。 但是监听屏幕旋转属于是 iOS 的平台特有代码无法直接在 kotlin 中实现所以只能在 iOS 原生代码中实现监听后调用 kotlin 代码更改 Compose 界面逻辑。 在开始之前还是得说明一下毕竟我不是 iOS 开发者只是 Android 开发所以对于 iOS 原生代码一窍不通下文中提到的大多数 iOS 代码都是我从网上 copy 下来修改的难免会有所错误各位大佬发现了欢迎指正。 那么我们正式开始我们的适配之路吧 首先我们需要在 iOS 原生代码也就是 swift 中实现对于屏幕旋转事件的监听。 使用 Xcode 打开我们的 Compose MultiPlatform 项目的 iosApp 目录。 然后找到 ContentView.swift 文件并打开在其中添加下面一些函数 struct DetectOrientation: ViewModifier { func body(content: Content) - some View {content.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in// 触发屏幕方向改变事件}} }extension View {func detectOrientation() - some View {modifier(DetectOrientation())} }上述代码在 DetectOrientation 中订阅了接收屏幕方向改变事件然后又定义了一个 detectOrientation 扩展函数用于将这个订阅函数绑定到特定的 view 中。 接着我们在实际使用的 view 中添加这个扩展函数即可 struct ContentView: View {var body: some View {VStack {ComposeView().ignoresSafeArea(.keyboard) // Compose has own keyboard handler}.detectOrientation()} }上面的 ContentView 即我们实际用于放置 Compose UI 的界面代码所以我们就把检测屏幕方向改变的扩展函数加到这里。 此时只要 iOS 设备的屏幕方向发生改变就会触发 DetectOrientation 中的事件所以我们只要在其中调用我们的 kotlin 代码实现更改键盘逻辑即可。 在这里调用 kotlin 代码非常简单。 我们将 IDE 切换回 AndroidStudio并打开项目的 shared 模块的 iosMain 包下的 main.ios.kt 文件在其中直接添加一个函数 /*** param orientation 0 竖1 横* */ fun onScreenChange(orientation: Int) {if (orientation 0) {homeChannel?.trySend(HomeAction.OnScreenOrientationChange(changeToType KeyboardTypeStandard))}else {homeChannel?.trySend(HomeAction.OnScreenOrientationChange(changeToType KeyboardTypeProgrammer))} }这个函数逻辑也很简单接收一个参数 orientation 当其为 0 时表示切换到标准键盘为 1 时表示切换到程序员键盘。 在这个函数被调用后会发送一个 Action 通知 Compose 更改布局。 那么怎么在刚才的 swift 代码中调用这个代码呢 其实也很简单 struct DetectOrientation: ViewModifier {func body(content: Content) - some View {content.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in// 触发屏幕方向改变事件if (UIDevice.current.orientation.isLandscape) {Main_iosKt.onScreenChange(orientation: 1)}else {Main_iosKt.onScreenChange(orientation: 0)}}} }没错就是这么简单直接 Main_iosKt.onScreenChange() 就可以了。 需要注意的是这里的这个 onScreenChange 大概率会报错不用害怕重新编译一下即可。 这是因为在 iosMain 包下的 kt 函数都会被直接编译成 iOS 的 native 代码并通过 shared 映射给 iOS 所以直接调用即可。 kotlin 调用 swift 其实大多数的业务逻辑已经完全可以直接使用 kotlin 来编写而无需调用 swift 了除了一些平台特定 API 除外。 此时又有了两种解决方案一种是 kotlin MultiPlatform 已经封装了大多数的 iOS 平台特定代码到 kotlin 中我们直接调用即可。 例如关于蓝牙操作的 API 就封装在了 platform.CoreBluetooth 包中我们需要使用 iOS 的蓝牙时只需要在 kotlin 中导入这个包然后使用即可例如申请蓝牙权限 import platform.CoreBluetooth.CBCentralManager import platform.CoreBluetooth.CBManagerAuthorizationAllowedAlways import platform.CoreBluetooth.CBManagerAuthorizationDenied import platform.CoreBluetooth.CBManagerAuthorizationNotDetermined import platform.CoreBluetooth.CBManagerAuthorizationRestrictedinternal class BluetoothPermissionDelegate : PermissionDelegate {override fun getPermissionState(): PermissionState {return when (CBCentralManager.authorization) {CBManagerAuthorizationNotDetermined - {// 未授予权限}CBManagerAuthorizationAllowedAlways, CBManagerAuthorizationRestricted - {// 权限已授予}CBManagerAuthorizationDenied - {// 权限已被拒绝}else - {// 其他}}}override suspend fun providePermission() {CBCentralManager().authorization()}override fun openSettingPage() {// 打开设置界面} } 只是虽然 kotlin MultiPlatform 已经封装了大多数的平台特定 API 但是还是会有一些没有封装到的我们不得不只能通过调用 swift 来使用的 API 。 例如上文中我们提到了目前项目中移植到 iOS 缺失的部分是关于屏幕方向改变监听的其实与之对应的还缺失了直接强制更改当前屏幕方向的代码。 因为在程序中不仅支持旋转屏幕切换键盘类型也支持直接点击切换按钮切换键盘类型但是只切换类型而不强制旋转屏幕的话 UI 将会变得非常奇怪所以就必须在更改 UI 的同时更改屏幕方向。 而更改屏幕方向的 API 显然在 kotlin 中并不存在所以只能我们自己在 swift 中实现 func changeOrientation(to orientation: UIInterfaceOrientation) {if #available(iOS 16.0, *) {let windowScene UIApplication.shared.connectedScenes.first as? UIWindowSceneif (orientation.isPortrait) {windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: .portrait))}else {windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: .landscape))}}else {UIDevice.current.setValue(orientation.rawValue, forKey: orientation)} }在上述的 swift 代码中我们还对旋转屏幕做了一个适配因为在 iOS 16 以后原本直接使用 UIDevice.current.setValue 设置屏幕方向的方法被弃用了所以需要额外适配一下。 那么现在在 swift 中旋转屏幕的代码已经有了该怎么从 kotlin 中调用呢 答案是我不知道我找了很久的资料也没找到怎么从 kt 中直接调用 swift 函数的方法也许就是不支持吧。 但是别慌虽然没有直接支持的方法但是我们可以曲线支持。 即然上文我们已经知道了 swift 可以直接调用 kt 函数而且最重要的是kt 和 swift 都支持匿名函数以及把匿名函数作为函数的参数。 那么答案这不就出来了吗 我们首先在 kt 中定义一个匿名函数 var changeScreenOrientationFunc: ((to: Int) - Unit)? null 然后在 Compose 中点击按钮后需要旋转屏幕时调用这个匿名函数 fun changeKeyBoardType(changeTo: Int, isFromUser: Boolean) {if (changeTo KeyboardTypeStandard) {changeScreenOrientationFunc?.invoke(0)}else {changeScreenOrientationFunc?.invoke(1)} }接下来我们需要在 kt 中定义一个函数用于设置这个匿名函数然后提供给 swift 调用 fun changeScreenOrientation(callBack: (to: Int) - Unit) {changeScreenOrientationFunc callBack }最后我们只需要在 swift 中初始化时调用这个函数设置相应的匿名函数实现即可 Main_iosKt.changeScreenOrientation { KotlinInt inif (KotlinInt 0) {changeOrientation(to: UIInterfaceOrientation.portrait)}else {changeOrientation(to: UIInterfaceOrientation.landscapeLeft)} }总结 以上就是在 compose iOS 中 swift 与 kotlin 互操作的全部内容完整代码可见 calculator-Compose-MultiPlatform 项目。 本来今天是准备写在 kotlin jvm 平台调用 jni 实现和 c/c 的互操作的但是遇到一点啸问题忙活了一整天都没解决所以就临时改为写一篇 compose iOS 中 swift 与 kotlin 互操作了。
http://www.sadfv.cn/news/448611/

相关文章:

  • 呼市做无痛人流z首大网站呼伦贝尔市建设网站
  • 杨凌企业网站开发网站推广与电话销售
  • 如何设计网站首页导航旺店通erp企业版下载app
  • 中国安能建设总公司网站wordpress 设置域名
  • 公司建立网站的好处网上写文章用什么软件
  • 建设网站建设投标网1249中官网词asp.net免费网站
  • 网站建设易网沧州分销系统制作
  • 分析网站福州优秀网站建设公司
  • 网站建设心得总结垂直网站怎么做
  • 网站编辑如何做商城网站前台html模板
  • 盐城网站建设效果网站维护费计入什么科目
  • 网站推广应该坚持( )策略。自助建站视频网站
  • 网站做业务赚钱延长中路上海网站建设
  • 建设银行官方网站买五粮液酒如何做转运网站
  • 网站开发公司交易流程湘潭市建设局网站
  • lol做任务领头像网站电影网站建设视频教程
  • 天蝎网站建设公司磁力猫
  • 公司网站是怎么制作和维护的网站建设管理系统
  • 网站小图标素材教育网站开发
  • 为什么没有人做像58一样的网站深圳vi设计公司哪家好
  • 安徽建设教育协会网站wordpress安装完成访问不了
  • php网站 怎么做授权公司网站建设需要哪些
  • 网站反链暴增怎么回事在线捏脸网站需要多少钱
  • 单位网站备案要等多久在线图像制作
  • 湖州做网站的公司推广有奖励的app平台
  • 网站建设发展前景腾讯云服务器12元一年
  • 旅游休闲类网站的建设怎么注册一个公司网站
  • 响应式网站开发哪个好vi设计收费
  • 广阳区建设局网站找建设企业网站公司
  • 个人不能建设论坛网站怎么办重庆媒体网站建设单价