Посмотрели ли вы параметры, которые принимает функция CATransform3DRotate
?
Последние три элемента определяют вектор, вокруг которого будет отображаться представление.Ваш вектор параллелен оси Y.Попробуйте это вместо поворота вокруг вертикальной оси.
rotationAndPerspectiveTransform = CATransform3DRotate(
rotationAndPerspectiveTransform,
45.0f * M_PI / 180.0f,
1.0f, 0.0f, 0.0f);
Возможно, вам потребуется изменить опорную точку, чтобы получить ось с нужной "высотой".