Почему PKDrawing()!= PKDrawing()? (PencilKit)

Согласно документам, PKDrawing соответствует Equatable. Но если вы сравните 2 пустых рисунка с ==, он вернет false. Я отправил сообщение об ошибке через приложение обратной связи, но я публикую здесь, надеясь, что что-то пропустил, или другие также отправят отчет об ошибке, чтобы исправить это. Мне нужно проверить, есть ли у PKCanvasView какой-либо контент, и, поскольку PKDrawing является непрозрачным, мы не можем запрашивать штрихи или другие данные. Учитывая ограниченный API, кажется, что лучший способ проверить это что-то вроде этого:

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

Это вернет false, хотя независимо от canvasView.drawing. Четный, PKDrawing() == PKDrawing() возвращает ложь

2 ответа

В этом случае вы можете проверить bounds а также sizeобъекта рисования. И iOS 14 предоставила strokes что этот рисунок содержит.

      extension PKDrawing {
    
    func isEmpty() -> Bool {
        
        guard !bounds.isNull else { return true }
        guard !bounds.size.equalTo(CGSize.zero) else { return true }

        if #available(iOS 14.0, *) {
            guard !strokes.isEmpty else { return true }
        }
        
        return false
        
    }
    
}

Это мой подход к проверке пустого чертежа:

extension PKDrawing {
    var isBlank: Bool {
        get {
             return self.bounds == CGRect(origin: CGPoint(x: CGFloat.infinity, y: CGFloat.infinity), size: .zero)
        }
    }
}
Другие вопросы по тегам