iOS Swift中的碰撞检测

时间:2015-12-17 17:55:40

标签: ios swift

我为三个按钮和Floor UIImageView创建了一个碰撞检测功能,但我在if !isRotating代码行中收到了“预期声明”错误。一点帮助就会很棒。

import UIKit

class ViewController: UIViewController {
    var location = CGPoint(x: 0, y: 0)
    var animator:  UIDynamicAnimator?
    var gravity: UIGravityBehavior?
    var isRotating = false

    var collision: UICollisionBehavior!

    @IBOutlet var Ball1: UIButton!
    @IBOutlet var Ball2: UIButton!
    @IBOutlet var Ball3: UIButton!
    @IBOutlet var Floor: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.animator = UIDynamicAnimator(referenceView: self.view)

        let gravity = UIGravityBehavior (items: [self.Ball1!, self.Ball2!, self.Ball3!])
        let direction = CGVectorMake(0.0, 1.0)
        gravity.gravityDirection = direction
        self.animator?.addBehavior(gravity)

        Ball1.center = CGPointMake(160, 330)
        Ball2.center = CGPointMake(39, 163)
        Ball3.center = CGPointMake(240, 74)

        collision = UICollisionBehavior(items: [Floor!, Ball1!, Ball2!, Ball3!])
        collision.translatesReferenceBoundsIntoBoundary = true
        collision.addBoundaryWithIdentifier("barrier", fromPoint: CGPointMake(self.view.frame.origin.x, 350), toPoint: CGPointMake(self.view.frame.origin.x + self.view.frame.width, 350))
        animator!.addBehavior(collision)
    }


    if !isRotating {
        // create a spin animation
        let spinAnimation = CABasicAnimation()
        // starts from 0
        spinAnimation.fromValue = 0
        // goes to 360 ( 2 * π )
        spinAnimation.toValue = M_PI*2
        // define how long it will take to complete a 360
        spinAnimation.duration = 1
        // make it spin infinitely
        spinAnimation.repeatCount = Float.infinity
        // do not remove when completed
        spinAnimation.removedOnCompletion = false
        // specify the fill mode
        spinAnimation.fillMode = kCAFillModeForwards
        // and the animation acceleration
        spinAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        // add the animation to the button layer
        Ball1.layer.addAnimation(spinAnimation, forKey: "transform.rotation.z")
        Ball2.layer.addAnimation(spinAnimation, forKey: "transform.rotation.z")
        Ball3.layer.addAnimation(spinAnimation, forKey: "transform.rotation.z")
    } else {
        // remove the animation
        Ball1.layer.removeAllAnimations()
        Ball2.layer.removeAllAnimations()
        Ball3.layer.removeAllAnimations()
    }

    // toggle its state
    isRotating = !isRotating
}

The error is in the "if isRotating" check.

1 个答案:

答案 0 :(得分:4)

我开始清理你的代码以便于阅读,并且真的很难找到匹配的大括号。然后我意识到,那是你的问题:)

您的Customer方法从此处开始:

viewDidLoad()

结束于此:

override func viewDidLoad() {
    super.viewDidLoad()

    self.animator = UIDynamicAnimator(referenceView: self.view)

之后直接使用此代码: animator!.addBehavior(collision) } 。 Xcode很抱怨,因为你的代码只是放在你的课堂里,这是不允许的。该代码需要进入自己的方法,例如if !isRotating {