Итак, я довольно новичок в программировании на iOS и унаследовал проект от бывшего сотрудника. Мы создаем приложение, содержащее пользовательский интерфейс калибровки. Когда поступают данные, мы хотим плавно поворачивать наш "слой" (изображение иглы) от текущего угла до нового целевого угла. Вот что мы имеем, что хорошо работало с медленными данными:
-(void) MoveNeedleToAngle:(float) target
{
static float old_Value = 0.0;
CABasicAnimation *rotateCurrentPressureTick = [CABasicAnimation animationWithKeyPath:@"transform.rotation");
[rotateCurrentPressureTick setDelegate:self];
rotateCurrentPressureTick.fromValue = [NSSNumber numberWithFloat:old_value/57.2958];
rotateCurrentPressureTick.removedOnCompletion=NO;
rotateCurrentPressureTick.fillMode=kCAFillModeForwards;
rotateCurrentPressureTick.toValue=[NSSNumber numberWithFloat:target/57.2958];
rotateCurrentPressureTick.duration=3; // constant 3 second sweep
[imageView_Needle.layer addAnimation:rotateCurrentPressureTick forKey:@"rotateTick"];
old_Value = target;
}
Проблема заключается в том, что у нас есть новая схема данных, в которой новые данные могут появляться (и указанный выше метод) быстрее, прежде чем анимация будет завершена. Что происходит, я думаю, что анимация перезапускается со старой цели на новую цель, что делает ее очень нервной.
Итак, мне было интересно, как изменить приведенную выше функцию для добавления непрерывного/перезапускаемого поведения, как показано ниже:
- Проверьте, выполняется ли текущая анимация и
- Если да, укажите, где находится текущий угол анимации, а затем
- Отмените текущий и запустите новую анимацию от текущего вращения до нового целевого вращения.
Можно ли построить это поведение в указанной выше функции?
Спасибо. Извините, если вопрос кажется неосведомленным, я изучил и понял вышеуказанные объекты/методы, но не эксперт.