Вращение происходит вокруг начала координат (0,0) по умолчанию, но вы хотите вращаться вокруг центра круга, поэтому вам нужно выполнить дополнительные преобразования:
float midX = CGRectGetMidX(rect);
float midY = CGRectGetMidY(rect);
CGAffineTransform t =
CGAffineTransformConcat(
CGAffineTransformConcat(
CGAffineTransformMakeTranslation(-midX, -midY),
CGAffineTransformMakeRotation(angle)),
CGAffineTransformMakeTranslation(midX, midY));
CGPathAddEllipseInRect(animationPath, &t, rect);
По сути, это объединяет три преобразования: сначала круг перемещается в начало координат (0,0), затем применяется вращение, а затем он возвращается в исходное положение. Я сделал небольшую визуализацию, чтобы проиллюстрировать эффект:
Я выбрал квадрат вместо круга и 45 ° вместо 90 °, чтобы было легче увидеть поворот, но принцип тот же.