Skip to content

Instantly share code, notes, and snippets.

@cristhianleonli
Created April 4, 2018 20:09
Show Gist options
  • Save cristhianleonli/983295712da07f0077915b02b0f91a93 to your computer and use it in GitHub Desktop.
Save cristhianleonli/983295712da07f0077915b02b0f91a93 to your computer and use it in GitHub Desktop.
class ViewController: UIViewController {
@IBOutlet private weak var cardView: UIView!
private var animator: UIDynamicAnimator!
private var snapping: UISnapBehavior!
override func viewDidLoad() {
super.viewDidLoad()
animator = UIDynamicAnimator(referenceView: view)
snapping = UISnapBehavior(item: cardView, snapTo: view.center)
animator.addBehavior(snapping)
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(pannedView))
cardView.addGestureRecognizer(panGesture)
cardView.isUserInteractionEnabled = true
}
@objc func pannedView(recognizer: UIPanGestureRecognizer) {
switch recognizer.state {
case .began:
animator.removeBehavior(snapping)
case .changed:
let translation = recognizer.translation(in: view)
cardView.center = CGPoint(x: cardView.center.x + translation.x, y: cardView.center.y + translation.y)
recognizer.setTranslation(.zero, in: view)
case .ended, .cancelled, .failed:
animator.addBehavior(snapping)
case .possible:
break
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment