2012-04-13 2 views
1

В моей UIView, я создал UIImageView называется targetView, где я поставил его в ряд анимаций:Как обнаружить пересечение двух кадров изображения во время анимации?

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

Я также создал еще один UIImageView называется shootView, который будет двигаться в направлении цели по пальцу. Его движение также реализовано как анимация. В конце своей анимации, обнаружить пересекаться с targetView:

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

В настоящее время существует проблема: команда пересекаться только отлично работает, если targetView достиг конечной точки текущей анимации и shootView случается будь там. Хотя targetView находится в движении где-то посередине анимации, пересечение не может быть обнаружено, даже если визуально очень очевидно, что два кадра пересекаются.

ответ

1

Этот подход может быть сложным, поскольку вы можете получать обратные вызовы только в начале и конце анимации UIView. В вашем примере метод CGRectIntersectRect вызывается только после завершения анимации.

Одним из решений может быть использование NSTimer для анимирования положения съемки, и при каждом изменении положения обнаружение столкновения. i.e

[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 
}