Вот концепция того, как бы я попытался подойти к проблеме. Может быть, я постараюсь реализовать это в свободное время, чтобы иметь образец под рукой.
- В момент запуска анимации сделайте снимок текущего UIView, считав его графический контекст в растровое изображение
- Создайте три (да, три - голые со мной )
UIView
s с размерами, чтобы они составляли две половины переворачиваемого вида, с двумя видами для области справа половина
- Нарисуйте половину растрового изображения в левом представлении ( первый ), в правой половине в правом представлении ( второй ) в соответствующих
drawRect:
реализациях
- Скрыть исходный вид
- Создайте следующий вид, к которому мы хотим перейти
- также включает его содержимое в растровое изображение
- скрыть следующий вид
- сделать третий временный UIView, чтобы нарисовать правую половину изображения ( третий )
- позиционирует третий под второй
- Анимируйте половину перевёрнутого второго по левому краю
- сделать второй показ левой левой части следующего просмотра
- Сделать остальную часть анимации сальто
- После выполнения перехода показать следующий вид, скрыть все временные виды
- Et voilla! По крайней мере, я надеюсь.
Я думаю, что вместо этих трех UIViews вы могли бы использовать вместо одного UIView с тремя слоями CAL.
Существует проблема интерактивного перехода, когда пользователь проводит пальцем по страницам.
Я также думаю, что есть проблема с переворачивающимся представлением, чтобы иметь двухсторонний слой. У них не было возможности поиграть с этими свойствами и что они могут помочь достичь.
Другим решением было бы создать текстуру из содержимого UIView и разместить поверх нее поверхность OpenGL (альфа-прозрачная CAEAGLLayer
на основе, конечно). Тогда то, что вы будете делать с треугольниками, которые текстурированы с этим изображением, ограничено только вашим воображением. Я думаю, это также позволило бы создать похожую на Genie анимацию перемещения в корзину, которую использует приложение Mail iOS.
Редактировать: О, извините, я думал о флипборде справа налево, а не сверху вниз, но общая идея, конечно, та же.