Я работаю над UIPanGestureRecognizer и для меня это работает.но у меня есть некоторые проблемы, так как я новичок в iOS и только что перешел с Android на iOS.Сначала взгляните на то, что я хочу сделать:
Что я хочу: У меня есть UITableView, и я хочу выполнить считывание на ячейках.Я просто хочу перетащить их слева направо и переместить / удалить эту ячейку.Почти так же, как это сделано в Android.
Но я просто хочу переместить предмет только в одном направлении.И это "ЛЕВАЯ ПРАВА".Но не справа налево.Теперь взглянем на то, что я сделал до сих пор
Что я сделал:
@objc func handlePan(recognizer: UIPanGestureRecognizer) {
// 1
if recognizer.state == .began {
// when the gesture begins, record the current center location
originalCenter = center
print("Center",originalCenter)
}
// 2
if recognizer.state == .changed {
let translation = recognizer.translation(in: self)
center = CGPoint(x: originalCenter.x+translation.x, y: originalCenter.y)
// has the user dragged the item far enough to initiate a delete/complete?
deleteOnDragRelease = frame.origin.x < -frame.size.width / 2.0
completeOnDragRelease = frame.origin.x > frame.size.width / 2.0
// print ("FrameX = ",frame.origin.x , " , ","Width = ",frame.size.width / 2.0 , "Total = ",frame.origin.x < -frame.size.width / 2.0 )
//print ("DelOnDrag = ",deleteOnDragRelease , " , ","CompOnDrag = ",completeOnDragRelease)
}
// 3
if recognizer.state == .ended {
// the frame this cell had before user dragged it
let originalFrame = CGRect(x: 0, y: frame.origin.y,
width: bounds.size.width, height: bounds.size.height)
if deleteOnDragRelease {
if delegate != nil && clickedItem != nil {
// notify the delegate that this item should be deleted
delegate!.toDoItemDeleted(clickedItem: clickedItem!)
}
} else if completeOnDragRelease {
UIView.animate(withDuration: 8.2, animations: {self.frame = originalFrame})
} else {
UIView.animate(withDuration: 8.2, animations: {self.frame = originalFrame})
}
}
}
Я знаю, что могу проверить ".changed"и вычислить, будет ли значение X приближаться к 0 или меньше, чем 0. Но точка в течение некоторого времени будет перемещать элемент справа налево.
Вопрос: Можно ли как-нибудь получить значение x точки контакта?или просто как я могу заставить пользователя хотеть смахивать справа налево и просто мешать пользователю делать это ??Пожалуйста, поделитесь своими знаниями