У меня есть серия изображений в ViewController.
Я "плаваю" их, трансформируя их отдельные слои:
img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ);
Это дает эффект того, что слои всплывают над экраном - в симуляторе не будет видимого эффекта (что правильно).
То, что я хочу сделать, это создать эффект, при котором перемещение устройства влево / вправо / вперед / или назад сделает его тонко похожим на плавающие слои. Когда вы наклоняете устройство влево, оно должно наклонять весь обзор вправо. Это создаст ощущение, будто перемещение устройства позволяет вам заглядывать за углы, т. Е. Создается ощущение, что изображения действительно плавают над экраном, поскольку они будут двигаться с разной скоростью (в зависимости от их z-индекса).
Я сделал тестовый проект ( файл проекта здесь ), в котором есть пример проекта, который демонстрирует это.
Моя проблема в том, что я не математик, поэтому я борюсь с лучшим способом имитации едва различимого эффекта плавания. Прямо сейчас у меня есть слушатель для DeviceMotion, который затем делает:
self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI / 180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0);
Это очень близко к тому, что я хочу, но это не совсем верно.
Я думаю, что этот эффект можно использовать в различных приложениях. Я надеюсь распространить это на что-то, что мы с другом работаем с распознаванием лиц (чтобы оно переместило родительский вид на основе движения лица человека, даже если телефон / устройство сохраняют свою неподвижность).
Я понимаю, что заставит людей отвечать "просто используйте OpenGL". Это не тот ответ, который мне нужен - если вы не разместите кусок кода, который показывает, как интегрировать его в этот проект. (Я не ищу новых проблем для решения.: -)
Опять же, полный проект здесь ( iphone с плавающими представлениями ) для всех, кто хотел бы видеть эффект таким, какой он есть сейчас. (Когда это сработает, я оставлю полный (рабочий) проект, связанный здесь, для потомков.)