// MARK: - Touch Functions
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
guard let location = touches.first?.preciseLocationInView(quoteView) else { return }
if quoteView.pointInside(location, withEvent: event) {
locationInView = location.y
isInButton = true
} else {
isInButton = false
}
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
if isInButton {
guard let totalYMovement = touches.first?.preciseLocationInView(self.view).y,
locationInView = self.locationInView else { return }
var yMovement = totalYMovement - quoteViewLocation
if locationInView >= (self.quoteView.frame.height / 2) {
// Works!
yMovement = yMovement - (locationInView - (self.quoteView.frame.height / 2))
} else {
yMovement = yMovement + ((self.quoteView.frame.height / 2) - locationInView)
}
self.quoteView.transform.ty = yMovement
}
}
Я использовал приведенный выше код для перевода вида вдоль оси y. Переменная quoteViewLocation представляет собой таблицу CGPoint, которая возвращает
self.view.frame.height / 2
locationInView - это дополнительная CGPoint, которая устанавливается каждый раз, когда производится касание внутри вида, который необходимо преобразовать.
Вы можете разместить кнопку в любом месте вашего представления, используя мой код, просто убедитесь, что ваша переменная quoteViewLocation (как бы вы ее ни называли) возвращает CGPoint.y по горизонтали, разделяя представление. Эта точка должна быть соответствующей точкой суперпредставления. Под этим я подразумеваю, что если у вас есть дочерний вид с высотой 40 точек и супер-вид с высотой 40 точек, а дочерний вид имеет центрированный привкус в середине супер-вида, вы можете подумать, что CGPoint правильно возврат 20. Нет! Хотя это правильный центр Y дочернего вида, центр суперпредставления равен 200. Верните CGPoint суперпредставления.
Вы должны сделать это, чтобы преобразование было плавным.
Если вы хотите переместить вид вдоль оси x, это та же идея.
Если я что-то пропустил или промахнулся на меня. Здесь тоже пытаюсь учиться.
Спасибо