#ios #swift
#iOS #swift
Вопрос:
Я использую плавающий Cocoapod для создания плавающей кнопки действия для моего приложения iOS. Я хотел бы иметь возможность перетаскивать эту кнопку и привязывать ее к другой стороне экрана, если пользователь захочет убрать ее с дороги. Плавающий cocoapod уже поставляется со способом его перетаскивания, и я пытаюсь изменить этот метод, чтобы кнопка с анимацией привязывалась к противоположному углу экрана (в левом нижнем углу). Вот где я до сих пор:
extension UIView {
func addDragging(){
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(draggedAction(_ :)))
self.addGestureRecognizer(panGesture)
}
@objc private func draggedAction(_ pan:UIPanGestureRecognizer){
let translation = pan.translation(in: self.superview)
self.center = CGPoint(x: self.center.x translation.x, y: self.center.y translation.y)
pan.setTranslation(CGPoint.zero, in: self.superview)
// Added the following lines myself - not working
if let superview = self.superview {
if self.center.x < superview.frame.size.width / 2 {
//self.transform = CGAffineTransform( translationX: 50, y: 0.0 )
}
}
}
}
Код, который я добавил сам, распознает, что кнопка была перемещена в левую часть экрана, но это все, что у меня есть. Мне просто нужно, чтобы он анимировался в нижнем левом углу, когда пользователь перестает перетаскивать кнопку, а затем в другую сторону, если они снова переместят его вправо. Я не уверен, смогу ли я сделать это с ограничениями, поскольку я не использую раскадровки и понятия не имею, как этот cocoapod ограничивает себя. Очень благодарен за любую помощь!
Ответ №1:
Вы можете добиться этого, заменив добавленный код чем-то вроде:
if let superview = self.superview {
// Case to move to the left
if self.center.x < superview.frame.size.width / 2 {
UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut) {
self.frame = // Whatever your left frame is
} completion: { (blockCalledAfterAnimationBool) in
// A completion handler if you want it
}
} else { // Move to the right
UIView.animate(withDuration: 0.3, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut) {
self.frame = // Whatever your right frame is
} completion: { (blockCalledAfterAnimationBool) in
// A completion handler if you want it
}
}
}
Главное — рекомендуемое использование UIView.animate()
функции. Отрегулируйте параметры по мере необходимости, чтобы получить желаемую анимацию.