UIView's animateWithDuration: анимации: завершение: ошибка - PullRequest
0 голосов
/ 30 сентября 2010

У меня есть следующий код

-(void) animate:(UIButton*) b withState: (int) state andLastState:(int) last_state {
 if (state < last_state) {
     int stateTemp = state;
     float duration = 1.0 / 30.0;
     [b animateWithDuration: duration
         animations: ^{ [UIImage imageNamed:[NSString stringWithFormat:@"m1.a000%d.png", state]]; }
    completion: ^{ animate(b, stateTemp++, last_state); }];
     }
}

, но получить инкремент ошибки переменной только для чтения stateTemp

Я пытаюсь анимировать серию изображений, установив UIButton s изображение.

Что не так с этим кодом?

1 Ответ

4 голосов
/ 30 сентября 2010

Любая переменная, используемая внутри блока, const копируется. Так что на самом деле у вас происходит это:

-(void) animate:(UIButton*) b withState: (int) state andLastState:(int) last_state {
if (state < last_state) {
 int stateTemp = state;
 float duration = 1.0 / 30.0;
 [b animateWithDuration: duration
     animations: ^{
      [UIImage imageNamed:[NSString stringWithFormat:@"m1.a000%d.png", state]];
     }
     completion: ^{
      const int stateTempCopy = stateTemp;
      animate(b, stateTempCopy++, last_state); 
     }
 ];
 }
}

Проблема заключается в попытке изменить переменную const. Вы не можете сделать это. К счастью, есть способ обойти это, и это с помощью спецификатора __block.

Просто измените int stateTemp = state; на __block int stateTemp = state; и все будет хорошо. (Для документации по __block посмотрите документацию )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...