I'm trying to make a pong game in Xcode without using the Spritekit. I'm using UIVeiws for the ball and paddles. To move the paddle I used a pan gesture recognizer in the storyboard and connected it to the UIView.
I want to add a collision to the paddle, but I need it to move with the paddle. Right now, with the addBoundaryWithIdentifier, it only works when the paddle is at origin.
Help help! Here's my code so far...
class ViewController: UIViewController, UICollisionBehaviorDelegate {
var animator = UIDynamicAnimator()
var collision: UICollisionBehavior!
var paddleOneOriginalCenter: CGPoint!
@IBOutlet weak var ball: UIImageView!
@IBOutlet weak var paddleOne: UIView!
@IBAction func panGesturePaddleOne(sender: UIPanGestureRecognizer) {
let translation = sender.translationInView(view)
if sender.state == UIGestureRecognizerState.Began {
paddleOneOriginalCenter = paddleOne.center
}
paddleOne.center.y = paddleOneOriginalCenter.y + translation.y
}
override func viewDidLoad() {
super.viewDidLoad()
// Set up ball Dynamic Behaviors
self.animator = UIDynamicAnimator(referenceView: self.view)
// Ball Collisions
collision = UICollisionBehavior(items: [ball])
collision.addBoundaryWithIdentifier("paddleOne", forPath: UIBezierPath(rect: paddleOne.frame))
collision.setTranslatesReferenceBoundsIntoBoundaryWithInsets(UIEdgeInsets(top: 10, left: 1000, bottom: 10, right: 1000))
animator.addBehavior(collision)
// Ball Initial Velocity (Puhs)
var pushBehavior: UIPushBehavior = UIPushBehavior(items:[ball], mode: UIPushBehaviorMode.Instantaneous)
pushBehavior.pushDirection = getRandomDirection()
pushBehavior.magnitude = 1
animator.addBehavior(pushBehavior)
// Ball Bounce
let bounceBehaviour = UIDynamicItemBehavior(items: [ball])
bounceBehaviour.elasticity = 1.1
animator.addBehavior(bounceBehaviour)
}
func getRandomDirection() -> CGVector {
let x = CGFloat(arc4random())
let y = CGFloat(arc4random())
return CGVectorMake(x, y)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
I handled the situation by making the paddle very, very heavy to offset the collision with the ball. It's probably not the prettiest solution, but it works!