【问题标题】:Why does PKDrawing() != PKDrawing()? (PencilKit)为什么 PKDrawing() != PKDrawing()? (铅笔盒)
【发布时间】:2019-12-25 04:36:10
【问题描述】:

根据文档,PKDrawing 符合 Equatable。但是,如果您将 2 个空白图纸与 == 进行比较,则会返回 false。我通过反馈应用程序提交了一个错误,但我在这里发帖希望我错过了一些东西,或者其他人也会提交一个错误报告,以便可以修复这个问题。我需要检查 PKCanvasView 是否有任何内容,并且由于 PKDrawing 是不透明的,我们无法查询笔画或其他数据。鉴于有限的 api,似乎最好的检查方法是这样的:

extension PKCanvasView {
    func isEmpty() -> Bool {
      return self.drawing == PKDrawing()
    }
}

不管canvasView.drawing如何,这都会返回false。甚至,PKDrawing() == PKDrawing() 返回 false。

【问题讨论】:

  • 奇怪的是,文档还显示它实现了 != 函数,并且文档声明如果对象相等,它会返回 true。似乎倒退了。

标签: ios13 ipados apple-pencil pencilkit


【解决方案1】:

在这种情况下,您可以检查绘图对象的bounds。并且 iOS 14 已经提供了这个绘图包含的strokes。

extension PKDrawing {
    
    func isEmpty() -> Bool {

        if #available(iOS 14.0, *) {
            return strokes.isEmpty
        } else {
            return drawing.bounds.isEmpty
        }
    }
}

【讨论】:

    【解决方案2】:

    这是我检查图纸是否为空白的方法:

    extension PKDrawing {
        var isBlank: Bool {
            get {
                 return self.bounds == CGRect(origin: CGPoint(x: CGFloat.infinity, y: CGFloat.infinity), size: .zero)
            }
        }
    }
    

    【讨论】:

    • 我喜欢这个概念,但我在所有图纸上都得到了 TRUE。我用过 canvasView.drawing.isBlank 吗? print("BLANK") : print("DRAWING") 即使保存了图纸,self.bounds 也显示为 (inf, inf, 0.0, 0.0),无论是否为空白。我不确定边界是否已更新。 canvasView 是我的 PKCanvasView。你知道我做错了什么吗?
    猜你喜欢
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2020-02-18
    • 2019-10-27
    相关资源
    最近更新 更多