2016-07-06 20 views
0

Ich bin neu in XCode und Swift ... Allerdings dachte ich, ich versuche es ... Ich hätte gerne zwei dragbare Images und wenn sie kollidieren, sollte ein Alarmfenster auftauchen. .Ich habe den Code unten angehängt ... wenn ich laufe den Code ich die folgende Warnung erhalten:UIPanRecognizer: Kann nicht vorhanden sein AlertController

UIPanRecogniserSwift [10047: 300286] Achtung: Es wurde versucht, auf dem präsentieren bereits

präsentiert ich bin nicht sicher, wie das zu beheben ist. Bereits versucht, die if-Anweisung an verschiedenen Stellen im Code ohne Erfolg zu setzen. Es besteht auch die Möglichkeit, auf die Schaltfläche "Zurücksetzen" im Warnfenster für einen Befehl zuzugreifen (d. H. Wenn der Benutzer Zurücksetzen drückt, bringt Bild 1 an den Ort x, y)?

import UIKit 

class ViewController: UIViewController { 


@IBOutlet var yellowBox: UIView! 

@IBOutlet var Dice: UIImageView! 



@IBAction func panYellowView(sender: UIPanGestureRecognizer) { 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x +  translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 


} 

/*func showAlert() { 
    let alertController = UIAlertController(title: "Collided", message: "You have collided",preferredStyle: UIAlertControllerStyle.Alert) 

    alertController .addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

    alertController .addAction(UIAlertAction(title: "Reset", style: .Cancel, handler: nil)) 

    self.presentViewController(alertController, animated: true, completion: nil) 
}*/ 





@IBAction func panDiceView(sender: UIPanGestureRecognizer) { 

    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 


} 



@IBAction func ifCollided() { 

    if CGRectIntersectsRect(yellowBox.frame, Dice.frame){ 

     //showAlert() 


      let alertController = UIAlertController(title: "Collided", message: "You have collided",preferredStyle: UIAlertControllerStyle.Alert) 

      alertController .addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

      alertController .addAction(UIAlertAction(title: "Reset", style: .Cancel, handler: nil)) 

      self.presentViewController(alertController, animated: true, completion: nil) 

      //showAlert() 


    } 

} 



override func viewDidLoad() { 
    super.viewDidLoad() 



    //self.ifCollided() 

    // Do any additional setup after loading the view, typically from a nib. 
} 







override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

Antwort

0

Dieser Code funktioniert gut, Sie prüfen nicht ifCollided() wenn Würfel bewegen. Dieser Code funktioniert gut mit meinem Xcode 7.3.1 iOS 9,3

import UIKit 

class ViewController: UIViewController { 


@IBOutlet var yellowBox: UIView! 
@IBOutlet var Dice: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    Dice.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.panDiceView(_:)))) 
    yellowBox.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.panYellowView(_:)))) 
} 

func panYellowView(sender: UIPanGestureRecognizer) 
{ 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x +  translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 
} 

func showAlert() 
{ 
    let alertController = UIAlertController(title: "Collided", message: "You have collided",preferredStyle: UIAlertControllerStyle.Alert) 
    alertController .addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
    alertController .addAction(UIAlertAction(title: "Reset", style: .Cancel, handler: nil)) 
    self.presentViewController(alertController, animated: true, completion: nil) 
} 

func panDiceView(sender: UIPanGestureRecognizer) 
{ 
    let translation = sender.translationInView(self.view) 
    sender.view!.center = CGPoint(x: sender.view!.center.x + translation.x, y: sender.view!.center.y + translation.y) 
    sender.setTranslation(CGPointZero, inView: self.view) 
    self.ifCollided() 
} 

@IBAction func ifCollided() 
{ 
    if CGRectIntersectsRect(yellowBox.frame, Dice.frame){ 
     showAlert() 
    } 
} 
} 

Versuchen Sie, die Methode performSelector

self.performSelector(#selector(self.showAlert)) 
+0

hey thanks so much zu nennen :) seine Arbeit jetzt völlig in Ordnung !! Sie fügte hinzu: Dice.addGestureRecognizer (UIPanGestureRecognizer (Ziel: Selbst, Aktion: #selector (self.panDiceView (_ :)))) yellowBox.addGestureRecognizer (UIPanGestureRecognizer (Ziel: Selbst, Aktion: #selector (Selbst. panYellowView (_ :)))) unter viewDidLoad. Warum hast du das getan? weil es scheint, dass meine Warnungen aufgrund davon aufgetreten sind – CatiaV5

+0

Wenn dies hilft, bitte akzeptieren Sie dies als Antwort, und helfen Sie anderen, die richtigen Lösungen zu finden –

+0

Glücklich zu helfen :) –