2015-06-09 3 views
1

У меня есть два вида (один внутри другого).Нужен какой-то обратный CATransform3d

Надпись «полноэкранный» (это означает, что оно имеет frame == screenBounds и layer.transform = CATransform3DIdentity). Таким образом, он выглядит как прямой.

Подраздел имеет одинаковую рамку, но также имеет определенное преобразование, которое содержит перевод, поворот, масштаб и перспективу. Так что это похоже на трапецию.

Кроме того, в моем случае родительский и дочерний кадры не пересекаются. Таким образом, родительский вид выглядит как прямой, а ребенок выглядит как трапеция.

Какое одно комплексное преобразование следует применить к этим обоим представлениям, чтобы сделать подвью «полноэкранным»? (После этого преобразования родительского представления будет трапеция наоборот)

Если было бы более понятно для вас, я имею в виду это преобразования:

http://www.youtube.com/watch?v=bjPQG43c_pE&t=1m00s

Это происходит, когда вы выбираете один из сафари страниц 3D список.

+0

«перспектива» означает ли вы, что ваше преобразование содержит сдвиг? –

+0

Я имею в виду следующее: http://static.iconsplace.com/icons/preview/maroon/table-256.png. Столбец прямоугольный, но когда вы видите на этом снимке, он выглядит как трапеция. –

+0

У вас есть проект github с этим? Или, по крайней мере, матрицу, с которой вы имеете дело? –

ответ

1

Если предположить, что матрица преобразования вашего внутреннего зрения содержит только affine преобразования (т.е. перемещение, вращение, масштабирование, отражение, сдвиг) все, что вам нужно сделать, это invert матрица преобразования вашего внутреннего окна, чтобы преобразовать его в пределы outerview, предполагая, что его рамка такая же, как и outerview.

CATransform3D innerViewTransform = innerView.layer.transform; 
outerView.layer.transform = CATransform3DInvert(innerViewTransform); 

Примечание: преобразование применяется вокруг -anchorPoint собственности. FYI.

+0

Возможно, это правильно, но я не могу проверить его, потому что ваш метод не учитывает «перспективное» преобразование (элемент 'm34'). Поэтому я не знаю, как применять опорную точку, отличную от стандартной. –

+0

@ VyachaslavGerchicov пока не беспокоится о якорной точке. «Перспектива» обрабатывается «проекционной системой» не самим объектом. Может существовать проекция «перспектива» или «орфографическая» проекция, и объекты в сцене не обращают на это внимания. Как и в случае, 1 сцена может отображаться с использованием как перспективных, так и орфографических режимов. –

+0

Я имею в виду, если я применяю это преобразование, не принимая во внимание «перспективу», тогда представление не только в полноэкранном режиме, но оно остается трапецией непрямым. Не могли бы вы объяснить, как он обрабатывается проекционной системой. Я взял «iCarousel» в качестве примера, и они сами обрабатывают «перспективу». Я пробовал другие способы, но не нашел способа изменить прямоугольник в трапецию. –