Прежде всего, почему вы избегаете удаления анимации после завершения?Вам не нужны эти две строки,
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
, так как вы фактически устанавливаете свойство transform слоя.Эти две строки - то, что вы бы использовали, если бы все, что вам нужно, было конечным визуальным состоянием после анимации, сохраняя преобразование таким же, как и в оригинале (который, честно говоря, я никогда не использовал).
Следующее, что вам нужно понять, это то, что вы устанавливаете преобразование на одно и то же значение дважды.Установка преобразования на слое не является аддитивной по умолчанию.Я имею в виду, что, хотя вы ожидаете, что он возьмет ваше первое преобразование и снова объединит то же преобразование из конечного состояния преобразования, это не сработает так с кодом, который вы используете.Вы не увидите изменений, потому что вы устанавливаете состояние в состояние, в котором оно уже есть.
Я не пробовал, но думаю, что вы могли бы взять первое преобразование и объединить новое.Что-то вроде:
layer.transform = CATransform3DRotate(layer.transform, M_PI/8.0, 0, 0, 1);
Обратите внимание, что я начинаю с текущего преобразования на слое (первый параметр CATransform3DRotate) вместо идентификации.Дайте это попробовать.Если это не работает, попробуйте что-то вроде:
layer.transform = CATransform3DConcat(layer.transform,
CATransform3DMakeRotation(M_PI/8.0, 0, 0, 1));