MapAmapShowContentMapView.swift 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //
  2. // MapAmapShowContentMapView.swift
  3. // map_amap_ios
  4. //
  5. // Created by 诺诺诺的言 on 2025/7/22.
  6. //
  7. import UIKit
  8. import SwiftUI
  9. import Flutter
  10. @available(iOS 13.0, *)
  11. class MapFlutterViewFactory: NSObject, FlutterPlatformViewFactory {
  12. private var messenger: FlutterBinaryMessenger
  13. init(messenger: FlutterBinaryMessenger) {
  14. self.messenger = messenger
  15. }
  16. func create(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?) -> FlutterPlatformView {
  17. return MapAmapShowContentMapView(withFrame: frame, viewIdentifier: viewId, arguments: args, binaryMessenger: messenger)
  18. }
  19. func createArgsCodec() -> FlutterMessageCodec & NSObjectProtocol {
  20. return FlutterStandardMessageCodec.sharedInstance()
  21. }
  22. }
  23. @available(iOS 13.0, *)
  24. class MapAmapShowContentMapView: NSObject, FlutterPlatformView {
  25. var contentView: UIView
  26. var methodChannel: FlutterMethodChannel
  27. var viewModel: MapAmapViewAndDataExchange = .init()
  28. init(withFrame frame: CGRect, viewIdentifier viewId: Int64, arguments args: Any?, binaryMessenger messenger: FlutterBinaryMessenger) {
  29. contentView = UIView()
  30. methodChannel = FlutterMethodChannel(name: MapAmapViewOnlyKeyword.mapViewMethodChannelName + "\(viewId)", binaryMessenger: messenger)
  31. super.init()
  32. createMapView()
  33. setupMethodChannel()
  34. }
  35. func view() -> UIView {
  36. return contentView
  37. }
  38. func createMapView() {
  39. let keyWindows = (UIApplication.shared.connectedScenes.first as? UIWindowScene)?.windows.first(where: { $0.isKeyWindow })
  40. let topController = keyWindows?.rootViewController
  41. viewModel.methodChannel = methodChannel
  42. let vc = MapAmapThemeControl(viewModel: viewModel)
  43. let mapView = vc.view!
  44. mapView.translatesAutoresizingMaskIntoConstraints = false
  45. topController?.addChild(vc)
  46. contentView.addSubview(mapView)
  47. NSLayoutConstraint.activate(
  48. [
  49. mapView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
  50. mapView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
  51. mapView.topAnchor.constraint(equalTo: contentView.topAnchor),
  52. mapView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)
  53. ]
  54. )
  55. vc.didMove(toParent: topController)
  56. }
  57. func setupMethodChannel() {
  58. methodChannel.setMethodCallHandler({ [weak self] (call, result) in
  59. self?.viewModel.handleMethodCall(call, result: result)
  60. })
  61. }
  62. }