Имитация эффекта плавающего изображения с помощью CoreMotion / DeviceMotion на iPhone

У меня есть серия изображений в 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 ) для всех, кто хотел бы увидеть эффект таким, какой он есть прямо сейчас . (Когда это сработает, я оставлю полный (рабочий) проект, связанный здесь, для потомков.)

9
задан Jeffrey Berthiaume 16 March 2011 в 06:59
поделиться