У меня есть UIView (и таким образом CALayer), который я пытаюсь деформировать или изогнуть немного в 3D пространстве. Таким образом, предположите, что мой UIView является плоской маркировкой, которая я хочу частично перенести пивную бутылку (не 360 градусов вокруг, только на одной "стороне").
Я полагал, что это будет возможно путем применения преобразования к слою представления, но насколько я могу сказать, это преобразование ограничено вращением, масштабом и переводом слоя однородно. Я мог быть неправым здесь, поскольку моя линейная алгебра является туманной в этой точке по меньшей мере.
Как я могу достигнуть этого?
Взгляните на пример кода Apple PVRTextureLoader Это проект OpenGL, который демонстрирует, как отобразить текстуру (вашу метку) на поверхности (на цилиндре в вашем случае).
Джефф ЛаМарш опубликовал хороший учебник, чтобы начать работу с Open GL.
Лучшее, что вы можете сделать с Core Animation, - это выполнить кусочно-линейную аппроксимацию.
Например, вы можете разделить свой «цилиндр» на восемь сегментов и расположить их так:
_
/ \
| |
Вы можете дать им одно и то же изображение, но изменить перевод так, чтобы они выровнялись по краям. Затем дайте каждому преобразование (либо простое горизонтальное сжатие, либо своего рода «трапецеидальный камень», если вы хотите получить перспективный вид).
В действительности вы, вероятно, захотите использовать более восьми сегментов. Обратите внимание, что они будут сосредоточены у краев вашего обзора.
Эта CSS-анимация может вдохновить вас.
На этой странице есть несколько примеров "искажения": http://www.sgi.com/products/software/opengl/examples/more_samples/
Я (честно) не знаю, как сделайте это, но у меня есть эта страница в закладках в течение некоторого времени, чтобы попытаться деформировать / преобразовать UIView с сеткой / сеткой.
Удачи.
^. ^