将加载动画放在 VNDocumentViewController Swift 上

问题描述 投票:0回答:2

是否可以在 VNDocumentViewController 上放置加载动画?例如,当用户按下

Save
按钮时,有没有办法让我以某种方式指示
Vision
正在处理图像并且尚未冻结?现在,在我的应用程序中,用户按下“保存”和正在处理的实际图像之间有很长的停顿。这是我正在尝试创建的另一篇文章中的示例

ios swift animation loading apple-vision
2个回答
1
投票

这是使用 UIActivityIndicatorView() 添加加载指示器的一个示例。

startAnimating() 启动动画,stopAnimation() 停止动画。

iOS - 在屏幕中央而不是视图显示进度指示器

guard let topWindow = UIApplication.shared.windows.last else {return}
let overlayView = UIView(frame: topWindow.bounds)
overlayView.backgroundColor = UIColor.clear
topWindow.addSubview(overlayView)
let hudView = UIActivityIndicatorView()
hudView.bounds = CGRect(x: 0, y: 0, width: 20, height: 20)
overlayView.addSubview(hudView)
hudView.center = overlayView.center
hudView.startAnimating()

或者,您可以考虑使用 Cocoapod MBProgressHud


0
投票

有一种方法可以在 Swift 中扩展类来很好地解决这个问题。这个想法是你想要在你的 VNDocumentCameraViewController 中有一个 UIActivityIndicator。但我们希望它成为我们使用的每个版本的一部分。我们可以简单地将 DocumentVC 的视图嵌入到当前视图中,并在视图堆栈中将 UIActivityIndicator 叠加到其上方,但这非常麻烦。这是我们可以扩展任何类并解决这个问题的快速方法

import VisionKit
import UIKit

extension VNDocumentCameraViewController {
    
    private struct LoadingContainer {
        static var loadingIndicator = UIActivityIndicatorView()
    }
    
    var loadingIndicator: UIActivityIndicatorView {
        return LoadingContainer.loadingIndicator
    }
    
    func animateLoadingIndicator() {
        if loadingIndicator.superview == nil {
            view.addSubview(loadingIndicator)

            //Setup your constraints through your favorite method
            //This constrains it to the very center of the controller
            loadingIndicator.frame = CGRect(
                x: view.frame.width / 2.0,
                y: view.frame.height / 2.0,
                width: 20,
                height: 20)

            //Setup additional state like color/etc here
            loadingIndicator.color = .white
        }
        loadingIndicator.startAnimating()
    }
    
    func stopAnimatingLoadingIndicator() {
        loadingIndicator.stopAnimating()
    }
}

我们可以调用这些函数的地方是您在呈现的 ViewController 中实现的 VNDocumentCameraViewController 的委托方法:

func documentCameraViewController(
    _ controller: VNDocumentCameraViewController, 
    didFinishWith scan: VNDocumentCameraScan
) {
    controller.animateLoadingIndicator()
}
© www.soinside.com 2019 - 2024. All rights reserved.