2016-05-26 9 views
2

Ich bin verpflichtet, eine Breakout-App in einer Single-View-Anwendung in der Swift-Sprache zu machen. Allerdings habe ich Probleme, den "Ball" zu bekommen, wenn er auf die Barriere trifft. Außerdem habe ich Probleme, die Schranke verschwinden zu lassen, nachdem sie getroffen wurde. Hat jemand die Lösung dazu, oder hat jemand eine Beispiel-App, von der ich ausschauen kann? Dies ist in Single-View-Anwendung, nicht Sprite.UICollisions in Swift

var dynamicAnimatior = UIDynamicAnimator() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    dynamicAnimatior = UIDynamicAnimator(referenceView: view) 
    setupViews() 
} 

func setupViews() { 

    let blueSquare = UIView(frame: CGRectMake(100, 100, 50, 50)) 
    blueSquare.backgroundColor = UIColor.blueColor() 
    view.addSubview(blueSquare) 

    let barrier = UIView(frame: CGRect(x: 0, y: 300, width: 130, height: 20)) 
    barrier.backgroundColor = UIColor.redColor() 
    view.addSubview(barrier) 

    addDynamicBehaviors([blueSquare]) 
} 

func addDynamicBehaviors(array: [UIView]) { 

    let dynamicItemBehavior = UIDynamicItemBehavior(items: array) 
    dynamicItemBehavior.density = 1.0 
    dynamicItemBehavior.friction = 0.0 
    dynamicItemBehavior.resistance = 0.0 
    dynamicItemBehavior.elasticity = 1.0 
    dynamicAnimatior.addBehavior(dynamicItemBehavior) 

    let pushBehavior = UIPushBehavior(items: array, mode: .Instantaneous) 
    pushBehavior.magnitude = 1.0 
    pushBehavior.pushDirection = CGVectorMake(0.5, 0.5) 
    dynamicAnimatior.addBehavior(pushBehavior) 

    let collisionBehavior = UICollisionBehavior(items: array) 
    collisionBehavior.translatesReferenceBoundsIntoBoundary = true 
    collisionBehavior.collisionMode = .Everything 
    collisionBehavior.collisionDelegate = self 

    dynamicAnimatior.addBehavior(collisionBehavior)  
} 

Antwort

0

Sie müssen sowohl die Objekte in Ihrer UICollisionBehavior haben, wenn man sie zusammenstoßen wollen. Je nachdem, was Sie benötigen, gibt es mehrere Möglichkeiten. Ich nehme an, dass Sie Ihren Ball müssen auf Barriere springen, so erstellen, das Verhalten:

let collisionBehavior = UICollisionBehavior(blueSquare: array) 

und dann eine starre Grenze hinzuzufügen, die Ihre Barriere entsprechen:

let edge = CGPointMake(barrier.frame.origin.x + barrier.frame.size.width, 
         barrier.frame.origin.y + barrier.frame.size.heigth); 
collisionBehavior.addBoundaryWithIdentifier("barrier", 
              fromPoint:barrier.frame.origin, 
              toPoint:rightEdge]; 

Nun, wenn Sie wollen erfassen die Kollision müssen Sie einen Delegaten collisionDelegate hinzufügen. Dieser Delegat sollte in der Lage sein, auf mehrere Methoden zu reagieren, wenn ein Treffer auftritt, (lesen Sie die Dokumentation über UICollisionBehaviorDelegate.

+0

Immer noch nicht funktioniert, sagt Barriere kann nicht gezeigt werden. Irgendwelche Idee auf eine Lösung? –

+0

Pass Parameter, ich zeige Ihnen nur die Idee... –