Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-Swift中的碰撞检测_Ios_Swift - Fatal编程技术网

iOS-Swift中的碰撞检测

iOS-Swift中的碰撞检测,ios,swift,Ios,Swift,我已经为三个按钮和地板UIImageView创建了一个碰撞检测功能,但是我在if中得到了一个“预期声明”错误!i旋转代码行。一点帮助就好了 import UIKit class ViewController: UIViewController { var location = CGPoint(x: 0, y: 0) var animator: UIDynamicAnimator? var gravity: UIGravityBehavior? var isRo

我已经为三个按钮和地板
UIImageView
创建了一个碰撞检测功能,但是我在
if中得到了一个“预期声明”错误!i旋转
代码行。一点帮助就好了

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
}

我开始清理您的代码以使其更易于阅读,并且很难找到匹配的括号。然后我意识到,这是你的问题:)

您的
viewDidLoad()
方法从这里开始:

override func viewDidLoad() {
    super.viewDidLoad()

    self.animator = UIDynamicAnimator(referenceView: self.view)
结束于此:

    animator!.addBehavior(collision)
}
紧接着,你就有了这个代码:
if!isRotating{
。Xcode正在抱怨,因为您的类中没有该代码,这是不允许的。该代码需要放在自己的方法中,例如
func createSpinAnimation()