Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <code>
- @IBOutlet weak var image1: UIImageView!
- @IBOutlet weak var image2: UIImageView!
- @IBOutlet weak var target1: UIImageView!
- @IBOutlet weak var target2: UIImageView!
- var target1flg: Bool!
- var target2flg: Bool!
- var imageViewOrigin: CGPoint!
- override func viewDidLoad() {
- super.viewDidLoad()
- target1flg = true
- target2flg = true
- addPanGesture(v: image1)
- addPanGesture(v: image2)
- }
- func addPanGesture(v: UIView) {
- let pan = UIPanGestureRecognizer(target: self, action: #selector(sample.handlePan(sender:)))
- v.addGestureRecognizer(pan)
- }
- @objc func handlePan(sender: UIPanGestureRecognizer) {
- let pannedImageView = sender.view!
- switch sender.state {
- case .began:
- imageViewOrigin = pannedImageView.frame.origin
- view.bringSubview(toFront: pannedImageView)
- case .changed:
- moveViewWithPan(v: pannedImageView, sender: sender)
- case .ended:
- if pannedImageView.frame.intersects(target1.frame) && target1flg == true {
- snapView(v: pannedImageView, targetBox: target1)
- target1flg = false
- }
- else if pannedImageView.frame.intersects(target2.frame) && target2flg == true {
- snapView(v: pannedImageView, targetBox: target2)
- target2flg = false
- }
- else {
- returnViewToOrigin(v: pannedImageView, loc: imageViewOrigin)
- }
- default:
- break
- }
- }
- func moveViewWithPan(v: UIView, sender: UIPanGestureRecognizer) {
- let translation = sender.translation(in: view)
- v.center = CGPoint(x: v.center.x + translation.x, y: v.center.y + translation.y)
- sender.setTranslation(CGPoint.zero, in: view)
- }
- func returnViewToOrigin(v: UIView, loc: CGPoint) {
- UIView.animate(withDuration: 0.3, animations: {
- v.frame.origin = loc
- })
- }
- func snapView(v:UIView, targetBox:UIImageView){
- UIView.animate(withDuration: 0.3) {
- v.center = CGPoint(x:targetBox.center.x, y: targetBox.center.y)
- v.isUserInteractionEnabled = false
- }
- }
Add Comment
Please, Sign In to add comment