Вопрос изменился, пожалуйста, прочитайте весь пост.
Я должен что-то упустить. Я успешно сделал это с поворотами вокруг оси Y, но когда я пытаюсь сделать это вокруг оси X, все портится, и я не уверен, почему. Идея состоит в том, чтобы вращать слой вокруг края (в данном случае, нижнего края). Вид будет вращаться в и из видимости. Я искал Stack Exchange, погуглил его, прочитал пару уроков и прочитал документацию по Apple. Моя голова говорит мне, что это должно работать, но это не так. Я получаю ту анимацию, которую хочу, но она вращается вокруг верхнего края. Я могу заставить его вращаться вокруг нижнего края, но тогда это не в том направлении. Вот мой код, когда он вращается в правильном направлении, но вокруг верхнего края.
Примечание. У меня есть набор якорей:
rLayer.anchorPoint = CGPointMake(.5f, 0.0f);
Кроме того, источник y имеет отрицательный размер. Высота, когда я хочу, чтобы вид исчез. Таким образом, процентRotation будет 1, давая мне вращение M_PI_2. Когда начало координат равно 0, процентное значение поворота также равно 0, что дает мне поворот на 0. Это также позволяет отслеживать перемещение, что удобно.
Следующий код находится в анимационном блоке (обычно, если я не отслеживаю перетаскивание). Обратите внимание, что cRect - это прямоугольник, для которого я установил _toolbar.frame.
CALayer *rLayer = _toolbar.layer;
CGFloat zDist = self.view.window.bounds.size.height * 1.5;
CATransform3D rT = CATransform3DIdentity;
CGFloat percentRotation = 1.0f - ((cRect.size.height + cRect.origin.y) / cRect.size.height);
rT.m34 = 1.0f / -zDist;
rT = CATransform3DRotate(rT, M_PI_2 * percentRotation, 1.0f, 0.0f, 0.0f);
rLayer.transform = rT;
Я также пытался использовать -M_PI_2, но представление просто исчезает без анимации. Любая помощь будет принята с благодарностью.
ОБНОВЛЕНИЕ
Хорошо, я понял, но собираюсь немного изменить свой вопрос. Во-первых, я создал отдельный проект, чтобы никакой другой код не мешал анимации. Я узнал, что для поворота вокруг нижней оси X в iOS, точка привязки должна быть {0.5f, 1.0f}. Раздражает, что их документы не упоминают об этом, и с Core-что-нибудь, может быть трудно узнать, какова система координат на iOS.
Похоже, что мой код был в порядке (кроме якоря), так как он был точно таким же, как и в отдельном проекте. Поэтому я начал удалять другие элементы со страницы. Оказывается, я скрывал другой взгляд за тем, который пытался оживить. Он также был анимирован (без 3D-поворота, но только положение). Во время анимации этот вид появлялся над видом, который я пытался повернуть. В конце вращающийся вид просто появится над другим, создавая впечатление, что анимации вращения не было.
«Легкое» исправление - отказаться от анимации скрытого вида. Но это делает мой код немного более сложным, когда я действительно хочу показать это представление. Что я действительно хотел бы знать, так это то, почему core-animation делает это, и что я могу сделать, чтобы это исправить.