Создайте перспективу прямоугольников, лежащих на плоской поверхности - PullRequest
1 голос
/ 27 января 2011

Я уже некоторое время работаю в target-c, но у меня не было необходимости (до сих пор) углубляться в основную анимацию и графические манипуляции.

В настоящее время у меня есть четыре UIImageViews, которые я хочу анимировать в положение, при котором они выглядят так, как будто они лежат на плоской поверхности. Под этим я подразумеваю, что они будут начинаться в виде прямоугольников - неискаженных и плоских на экране, но будут анимированы в наклонном ракурсе, из-за чего будет выглядеть, будто они сидят на плоской поверхности.

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

CATransform3D transform = CATransform3DIdentity; 
transform.m34 = -1.0f / 700.0f;
// Perform other transforms
transform = CATransform3DRotate( transform,
    degreesToRadians(45.0f), 0.0f, 1.0f, 0.0f);

[layer setTransform:transform];

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

1 Ответ

0 голосов
/ 15 февраля 2011

Анимация выглядит перекошенной для меня. Попробуйте поэкспериментировать с коэффициентом m34, чтобы сделать его более асимметричным (установите его на более низкое значение, например -1.0f / 200.0f). Просто поэкспериментируйте, и в конечном итоге вы все поймете правильно. Вы можете изменить угол поворота на 45 градусов, если хотите, чтобы он был больше скошен.

Если ваше преобразование вообще не перекошено, то, возможно, одно из ваших преобразований перезаписывает преобразование (т. Е. Вы используете один из вызовов Make transform). Если это так: попробуйте переместить назначение transform.m34, чтобы оно было последним, прежде чем применять преобразование.

...