Почему 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)
}
}
}