把之前写的小工具记录一下。
❤️ ,工具使用 SwiftUI 为主,由于 LiveText 还没有提供 SwiftUI 的 API,所以使用 switfui 包装了一下 Uikit 的内容。
注意:仅支持iOS16系统以及A12芯片以上设备。
分享一下主要实现代码:
包装的 live-text swiftUI 组件:文本识别取景器,传入需要绑定的变量,识别文本后,将值传回 swiftui 页面。
//
// liveScaner.swift
// HKS
//
// Created by apple on 2022/11/18.
//
import Foundation
import SwiftUI
import UIKit
import VisionKit
struct LiveScaner: UIViewControllerRepresentable {
@Binding var startScanning: Bool
@Binding var scanText: String
@Binding var searchList:Array<CategoriesItem>
func makeUIViewController(context: Context) -> DataScannerViewController {
let controller = DataScannerViewController(
recognizedDataTypes: [.text()],
qualityLevel: .accurate,
recognizesMultipleItems: false, isHighFrameRateTrackingEnabled: true, isPinchToZoomEnabled: true, isHighlightingEnabled: true
)
controller.delegate = context.coordinator
return controller
}
func updateUIViewController(_ uiViewController: DataScannerViewController, context: Context) {
if startScanning {
try? uiViewController.startScanning()
} else {
uiViewController.stopScanning()
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, DataScannerViewControllerDelegate {
func findhks(waitSearch:String)->Array<CategoriesItem>{
print("list:")
print(waitSearch.replacing(/[、\s,。:()]/, with: ""))
let findRes:Array<CategoriesItem> = CateList.filter{ fl in
print( fl.name,waitSearch.score(word: fl.name))
return waitSearch.score(word: fl.name.replacing(/[、\s,。:()]/, with: "")) > 0
}
return findRes
}
var parent: LiveScaner
init(_ parent: LiveScaner) {
self.parent = parent
}
func dataScanner(_ dataScanner: DataScannerViewController, didTapOn item: RecognizedItem) {
switch item {
case .text(let text):
parent.searchList = findhks(waitSearch: text.transcript)
parent.scanText = text.transcript
default: break
}
}
}
}
swiftUI 使用
LiveScaner(startScanning: $startScanning, scanText: $scanText,searchList:$searchList)
.frame(height: 120)
APP 效果:App Store
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于