Я пытаюсь научиться использовать Swift, и я только в начале. Так что этот код, вероятно, очень плохой. Я не могу найти некоторую информацию об обработке var
в операторах switch
.
В приложении для iOS вы можете перетащить черный вид (imgView) вдоль экрана. Теперь, если касание заканчивается, imgView должен анимироваться в CGPoint, который рассчитывается от начальной и конечной точек жеста панорамирования.
@objc func handlePan(recognizer: UIPanGestureRecognizer) {
var locationOfBeganTap = CGPoint()
var locationOfEndTap = CGPoint()
let finalDestination = CGPoint(x: (locationOfBeganTap.x + locationOfEndTap.x), y: locationOfBeganTap.y + locationOfEndTap.y)
switch recognizer.state {
case .changed, .began:
locationOfBeganTap = recognizer.location(in: screenView)
print(locationOfBeganTap)
let translation = recognizer.translation(in: self.view)
if let view = recognizer.view {
view.center = CGPoint(x: view.center.x + translation.x, y: view.center.y + translation.y)
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
case .ended:
locationOfEndTap = recognizer.location(in: screenView)
UIView.animate(withDuration: 2.0, animations: {
print(locationOfBeganTap)
self.imgView.center = finalDestination
})
default:
break
}
Я хочу знать, почему переменная locationOfBeginTap правильно установлена в .began, но далее в операторе Switch переменная снова устанавливается в 0. Когда и почему это изменилось? И как мне этого избежать?