Анимация, которую вы выполняете, которая выглядит как нарисованная из этого ответа , имеет указанные значения как to, так и from, поэтому она будет просто поворачиваться от 0 до угловых радиан каждый раз. Это означает, что ваше изображение будет возвращаться к началу каждой анимации.
Обычно, если вы удалите строку fromValue, ваша анимация должна перейти от текущего угла к новому, но похоже, что свойство transform ведет себя немного по-другому. Вам необходимо установить значение fromValue в качестве текущего значения вращательного преобразования, извлеченного из presentationLayer вашего слоя. Следующий код должен повернуться на целевой угол от вашего текущего угла:
CABasicAnimation *rotate;
rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotate.fromValue = [[dialView.layer presentationLayer] valueForKeyPath:@"transform.rotation.z"];
rotate.toValue = [NSNumber numberWithFloat:angle];
rotate.fillMode = kCAFillModeForwards;
rotate.duration = 1;
rotate.removedOnCompletion = NO;
rotate.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
Обратите внимание, что я удалил преобразование градусов в радианы в toValue, потому что ваши вычисления acos () возвращают значения в радианах.
EDIT (23.10.2009): Исправлено мое предыдущее предположение о функционировании fromValue со свойством transform.