Я работаю с приложением для iOS, которое имеет анимацию вращающегося тела.Серия UIImages хранится в NSArray, а переменная отслеживает индекс текущего изображения.
Следующий метод обновляет UIImageView
- (void)renewImage{
[rotatingBody.image release];
rotatingBody.image = [[UIImage alloc] initWithContentsOfFile:[currentPerson.imageArray objectAtIndex:pictureIndex]];
}
До сих пор я вызывалметод в ответ на сенсорные события.Из события касания я вычисляю новый pictureIndex и затем вызываю [self renewImage].Это прекрасно работает.
Однако теперь я хочу добавить импульс к анимации.Вместо того, чтобы сразу вычислять следующее изображение, я вычисляю скорость.Я планирую создать цикл в отдельном потоке для обновления pictureIndex с помощью переменной скорости, уменьшения скорости и, в конечном итоге, вызова [self renewImage].
ВВОД ПРОБЛЕМЫ
При каждом вызове[self renewImage] более одного раза подряд в одной и той же функции (например, в цикле или просто дважды, разделенных каким-либо сном), экран не будет обновляться до последнего вызова.Это как если бы устройство (или компилятор) рационализировало первые обновления, хотя я уверен, что был создан метод renewImage (благодаря трассировке).
Вот некоторый тестовый код, который не работает:
while (velocity > 0) {
pictureIndex++;
pictureIndex = pictureIndex % [self getNumberOfImages];
if (pictureIndex < 0)
{
pictureIndex += [self getNumberOfImages];
}
velocity -= 20;
NSLog(@"velocity: %f", velocity);
[self renewImage];
[NSThread sleepForTimeInterval:0.5];
}
Также не это:
pictureIndex += 20;
[self renewImage];
sleep(1);
pictureIndex += 20;
[self renewImage];
Есть мысли?