2012-04-13 3 views
1

In meinem UIView, habe ich eine UIImageView erstellt Target genannt, wo ich es in eine Reihe von Animationen gesetzt haben:Wie erkennt man den Schnittpunkt zweier Bilder während der Animation?

[UIView animateWithDuration:1.0 
       animations:^{self.targetView.center = CGPointMake(220,20);} 
       completion:^(BOOL finished){ 
              //another animation will begin; 
              }]; 

Ich habe auch eine andere UIImageView genannt shootView, die auf die Zielrichtung bewegt auf einen Finger wischen. Seine Bewegung wird auch als Animation implementiert. Am Ende seiner Animation, erfassen die intersect mit dem Target:

[UIView animateWithDuration:1.0 
       animations:^{ 
       self.shootView.center = CGPointMake(destX, destY);} 
       completion:^(BOOL finished){ 
          if (CGRectIntersectsRect(self.targetView.frame, self.shootView.frame)) { 
          //do something 
          }]; 

Jetzt gibt es ein Problem: Der Befehl Schnitt nur funktioniert, wenn die Target den Endpunkt der aktuellen Animation erreicht hat und die shootView passiert da sein. Während sich das targetView irgendwo in der Mitte einer Animation bewegt, kann kein Schnittpunkt erkannt werden, auch wenn visuell sehr offensichtlich ist, dass sich die beiden Frames überschneiden.

Antwort

1

Dieser Ansatz kann schwierig sein, da Sie nur am Anfang und am Ende der UIView-Animationen Rückrufe erhalten können. In Ihrem Beispiel wird die CGRectIntersectRect-Methode erst aufgerufen, nachdem die Animation abgeschlossen wurde.

Eine Lösung könnte sein, einen NSTimer zu verwenden, um die Position des Shootview zu animieren, und mit jeder Positionsänderung die Kollisionserkennung durchzuführen. d. h.

[NSTimer timerWithTimeInterval: 0.03 target: self selector: @selector(timerTicked:) userInfo: nil repeats: YES]; 

-(void) timerTicked: (NSTimer*) timer { 

    // do move 
    // check for colisions 
    // optional invalidation of timer 
}