2015-12-17 3 views
2

Я создал функцию обнаружения столкновений для трех кнопок и пола UIImageView, но я получаю ошибку «Ожидаемая декларация» в строке кода if !isRotating. Немного помогло бы здорово.Обнаружение столкновений в iOS Swift

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.

ответ

4

Я начал очистку кода, чтобы сделать его более удобным для чтения, и действительно изо всех сил, чтобы найти соответствующий скобку. Тогда я понял, что это ваши проблемы :)

Ваш метод viewDidLoad() начинается здесь:

override func viewDidLoad() { 
    super.viewDidLoad() 

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

И здесь заканчивается:

animator!.addBehavior(collision) 
} 

Сразу же после этого, у вас есть этот код: if !isRotating {. Xcode жалуется, потому что у вас есть этот код, просто лежащий внутри вашего класса, что запрещено. Этот код должен быть включен в собственный метод, например. func createSpinAnimation().

+0

Это сработало! Спасибо, 2Straw! :))) – Xcoder555

Смежные вопросы