CATransform3D заставляет мой UITextView исчезнуть?

Итак, у меня есть UITextView, который должен визуально сидеть на нижнем краю экрана, а затем растягиваться вверх и обратно «в» экран, открывая «Звездные войны» в стиле сканирования.

После долгих поисков в Google и т. д. я чувствую, что у меня есть то, что выглядит как правильный код для работы... но вместо того, чтобы настроить вид в перспективе, который я искал, это просто заставляет UITextView полностью исчезнуть!

Текстовое представление настроено в раскадровке с пружинами/распорками (без автомакета), так что оно закреплено вверху и внизу основного вида, примерно на 20 пикселей с каждой стороны, а пружины активны в обоих направлениях. Его выход подключен к self.infoTextView. Он отображается, как я и ожидал, если я не применяю к нему никаких преобразований.

Но когда я запускаю приведенный ниже код в viewDidLoad, текстовое представление просто полностью исчезает. Я уверен, что что-то упускаю, но я не могу понять, что это такое.

CGRect frame = self.infoTextView.layer.frame;
self.infoTextView.layer.anchorPoint = CGPointMake(.5f, 1.0f);
self.infoTextView.layer.frame = frame;

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 1.57, 0, 1, 0);
self.infoTextView.layer.transform = rotationAndPerspectiveTransform;

Благодарность!


person DanM    schedule 23.05.2015    source источник


Ответы (1)


Есть две вещи, которые вам нужно изменить в вашем коде:

  1. Ось вращения. Вы вращаете его вокруг оси Y. Чтобы получить эффект, который вам нужен, вам нужно будет изменить преобразование вращения, чтобы повернуться вокруг оси X.
  2. Чтобы получить эффект «Звездных войн, открывающихся в стиле обхода», вам нужно установить отрицательный угол или отрицательную перспективу.

Кроме того, вы, вероятно, захотите установить более «сильную» перспективу, чтобы добиться более драматического эффекта.

Вот пример, основанный на вашем коде преобразования:

CGFloat angle = -45;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 200;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, angle / 180.0 * M_PI, 1, 0, 0);
self.infoTextView.layer.transform = rotationAndPerspectiveTransform;
person Artal    schedule 23.05.2015
comment
Это сработало! Спасибо! Теперь у меня есть еще одна проблема, связанная с прокруткой, но это уже другой вопрос... - person DanM; 24.05.2015