iOS 三方库使用注意

Lottie动画与WebView交互

1, Lottie ( iOS 动画 )

按钮使用 AnimatedButton ,

背景图片是一个动画,

几张图片,作为字符串,

放在网上的 json 文件里面


一导航,换页面,

AnimatedButton 就消失


   lazy var downBtn: AnimatedButton = {
        let btn = AnimatedButton()
        btn.animationView.backgroundBehavior = .pauseAndRestore
        btn.isHidden = true
        return btn
    }()

需要修改

backgroundBehavior



2, WebViewJavascriptBridge ( H 5 交互 )

ipad 上,gg 了


因为 js 检测平台,

错误


需要将

preferredContentMode

设置为,移动


    lazy var webView: WKWebView = {
        let configuration = WKWebViewConfiguration()

        if #available(iOS 13.0, *) {
            configuration.defaultWebpagePreferences.preferredContentMode = .mobile
        }
        
        let w = WKWebView(frame: .zero, configuration: configuration)

        return w
    }()



Flutter 是一种跨平台框架,支持开发者通过 Dart 编程语言构建高性能的应用程序。当需要调用 iOS 原生功能或第三方库时,可以借助 Flutter 提供的“Platform Channels”机制,在 Dart 和 Swift/Objective-C 之间建立通信。 以下是详细介绍: ### 步骤一:创建 Platform Channel Flutter 使用 Platform Channels 来允许 Dart 代码与原生代码 (Swift 或 Objective-C) 进行交互。你可以选择三种类型的通道: 1. **MethodChannel**:用于发送同步或异步的消息并返回结果。 2. **EventChannel**:用于从原生端流式接收数据(如传感器、定位等实时更新的数据)。 3. **BasicMessageChannel**:适合简单的消息传递场景。 ### 步骤二:编写原生代码 #### 对于 iOS 端: 假设你想集成某个 iOS三方库 `SomeLibrary`。你需要修改项目中的 `ios/Runner` 文件夹下的文件: - 打开 Xcode 并添加所需的 CocoaPods 或 Framework 到项目的依赖项中。 - 创建一个 MethodChannel 实例,并处理来自 Flutter 的请求。 例如: ```swift import Flutter func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { if call.method == "invokeNativeFeature" { // 调用 SomeLibrary 的方法 let response = SomeLibrary.performAction() result(response) } else { result(FlutterMethodNotImplemented) } } ``` 然后注册这个 channel 到 AppDelegate 中: ```swift let controller : FlutterViewController = window?.rootViewController as! FlutterViewController let someChannel = FlutterMethodChannel(name: "com.example.somechannel", binaryMessenger: controller.binaryMessenger) someChannel.setMethodCallHandler({ [weak self] (call: FlutterMethodCall, result: FlutterResult) -> Void in self?.handle(call, result: result) }) ``` ### 步骤三:Dart 端发起调用 在 Dart 端设置同样的 MethodChannel 名字,并向其发出请求: ```dart static const platform = const MethodChannel('com.example.somechannel'); Future<void> invokeNativeFeature() async { String value; try { value = await platform.invokeMethod('invokeNativeFeature'); } on PlatformException catch (e) { print("Failed to Invoke Native Feature: '${e.message}'."); } } ``` ### 注意事项 - 如果是复杂的业务逻辑,建议将所有操作封装到插件中以便复用和管理。 - 认真考虑性能瓶颈以及线程安全的问题,尤其是涉及 UI 更新或其他耗时任务的时候。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值