SwiftUI3.0将UIKit ViewController转化成 swiftUI的view
SwiftUI3.0将UIKit ViewController转化成 swiftUI的view 这也是SwiftUI中的重点之重。因为swiftUI里面的功能不够完善,需要借助UIKit里面的东西,就像swift 刚刚发布的时候,有时候还要借助oc的第三方类库一样。swift导入oc框架,只要搞个桥接文件即可,导入一个头文件即可。都是类似的道理。
SwiftUI3.0将UIKit ViewController转化成 swiftUI的view。,也可以将UIKit 中的view 转化成 swiftUI ,继承 UIViewRepresentable 见名知意
//
// PageVC.swift
// ChinaLandmark
//
// Created by lujun on 2022/1/31.
//
import SwiftUI
struct PageVC: UIViewControllerRepresentable {
let pages: [UIViewController]
init(){
pages = featuredLandmarks.map{
UIHostingController(
rootView:
Image($0.imageName)
.resizable()
.scaledToFill()
)
}
}
func makeCoordinator() -> Coordinator {
Coordinator(pages: pages)
}
class Coordinator : NSObject ,UIPageViewControllerDataSource{
var pages: [UIViewController]
init( pages: [UIViewController]){
self.pages = pages
super.init()
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.firstIndex(of: viewController)!
return currentIndex == 0 ? pages.last : pages[currentIndex - 1]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let currentIndex = pages.firstIndex(of: viewController)!
return currentIndex == pages.count - 1 ? pages.first : pages[currentIndex + 1]
}
}
func makeUIViewController(context: Context) -> UIPageViewController{
let pageVC = UIPageViewController.init(transitionStyle: .scroll, navigationOrientation: .horizontal)
// pageVC.delegate = self
//从上下文获取 coordinator 的 datasource
pageVC.dataSource = context.coordinator
//类似这种写法
// pageVC.dataSource = Coordinator(pages)
return pageVC
}
func updateUIViewController(_ uiViewController: UIPageViewController, context: Context) {
uiViewController.setViewControllers([pages[0]], direction: .forward, animated: true)
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了