У меня есть кнопка, которая перетаскивается, и я не хочу, чтобы пользователь мог перетащить вид, чтобы стороны обрезались по краям экрана.Предотвращение перетаскивания изображения для выхода из экрана
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let position = touch.location(in: self.superview)
self.center = CGPoint(x: position.x, y: position.y)
}
}
Способ, которым я занимаюсь, представляет собой огромный набор инструкций if/else, проверяющих разрешенные области на экране.
let halfOfButton = CGFloat(85/2)
let heightOfTopBar = CGFloat(55) + halfOfButton
let widthOfScreen = CGFloat((self.superview?.frame.width)!) - halfOfButton
let heightOfScreen = CGFloat((self.superview?.frame.height)!) - heightOfTopBar
let heightOfBotBar = CGFloat((self.superview?.frame.height)! - heightOfTopBar)
if position.x > halfOfButton && position.x < widthOfScreen {
self.center = CGPoint(x: position.x, y: position.y)
} else {
if position.x < halfOfButton {
self.center = CGPoint(x: halfOfButton, y: position.y)
} else {
self.center = CGPoint(x: widthOfScreen, y: position.y)
}
}
if position.y > heightOfTopBar && position.y < heightOfScreen && position.x > halfOfButton && position.x < widthOfScreen {
self.center = CGPoint(x: position.x, y: position.y)
} else {
if position.y < heightOfTopBar {
self.center = CGPoint(x: position.x, y: heightOfTopBar)
} else {
self.center = CGPoint(x: position.x, y: heightOfScreen)
}
}
}
Есть ли лучший способ добиться этого? Этот код выше еще не работает. У него много недостатков в логике, где я говорю «если Y в порядке, а затем просто позвольте центру вашего касания быть центром кнопки», но затем это переопределяет код, который я пишу в X где, хотя Y может быть в порядке, X нет.
Я могу понять, что это логика, так, но, конечно, есть лучший способ сделать это?
Не видели раньше мин/макс. Работает отлично, спасибо! – user6820041