Итак, я написал протокол, чтобы сделать все, что когда-либо было UIView, которое соответствует его перетаскиванию. Однако, когда я тестирую это в симуляторе, он падает, когда я пытаюсь перетащить представление. и отображает в журналеПриложение Сбой при попытке сделать вид перетаскиваемым с протоколом
libc++abi.dylib: terminating with uncaught exception of type NSException
Протокол:
protocol Draggable {}
extension Draggable where Self: UIView {
func wasDragged (gestrue: UIPanGestureRecognizer) {
let translation = gestrue.translation(in: UIScreen.main.focusedView)
if let label = gestrue.view {
label.center = CGPoint(x: label.center.x + translation.x, y: label.center.y + translation.y)
}
gestrue.setTranslation(CGPoint.zero, in: UIScreen.main.focusedView)
}
func setGesture() {
let gesture = UIPanGestureRecognizer(target: UIScreen.main, action: Selector(("wasDragged:")))
self.addGestureRecognizer(gesture)
self.isUserInteractionEnabled = true
}
}
и в классе пользовательских этикеток я соответствовала его:
class DraggableLabel: UILabel, Draggable {
}
Тогда я назвал функцию setGesutre в viewDidLoad из контроллер:
override func viewDidLoad() {
super.viewDidLoad()
draggableLabel.setGesture()
}
OK Я признаю, что не знаю, что я делаю.