2013-04-24 2 views
0

У меня есть UIView, содержащий UITapGestureRecognizer, который запускает метод под названием handleLeftTap.Почему эта анимация работает только один раз?

-(void)handleLeftTap { 

    self.player.direction = LEFT; 

    if(!self.isAnimating && self.toTile.isWalkable) { 
     for(UIView *currentView in self.subviews) { 
      CABasicAnimation *moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; 
      [moveAnimation setDuration:MOVE_ANIMATION_DURATION]; 
      [moveAnimation setDelegate:self]; 
      [moveAnimation setRemovedOnCompletion:NO]; 
      [moveAnimation setFillMode:kCAFillModeForwards]; 
      moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(currentView.center.x+TILE_WIDTH, currentView.center.y)]; 
      [currentView.layer addAnimation:moveAnimation forKey:nil]; 
     } 
     NSLog(@"animated\n"); 
    } 
} 

Когда я впервые нажимаю на экран, эта анимация работает отлично; каждый subview перемещается вправо на TILE_WIDTH пикселей. Однако, если я снова коснусь экрана, анимация вообще не работает; нет просмотра движется. Я прошел через этот код с точками останова и подтвердил, что эта анимация добавляется к слоям. Просто анимация не применяется или что-то в этом роде. Есть ли способ исправить это?

+1

Проходит ли это после утверждения if во второй раз? – rdelmar

+0

@rdelmar - Да. Я поставил точку останова над оператором if, чтобы проверить это, и он действительно передает инструкцию if. – pasawaya

ответ

0

Не совсем уверен, но уверены ли вы, что вторая анимация отличается от местоположения после первой анимации?

+0

Я проверю. Одна секунда. – pasawaya

+0

Спасибо! Я записал позиции просмотров после анимации, и оказалось, что я фактически не менял позиции представления, а просто анимировал представления, чтобы они выглядели. Я исправил свой код, поставив код 'self.view.layer.position = finalPosition' в методе' animationDidStop'. – pasawaya

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