/ / Використання CATransform3D - aim-c, uitableview, catransform3d, catransform3drotate

Використання CATransform3D - об'єктивно-c, uitableview, catransform3d, catransform3drotate

Я намагаюся здійснити обертання на поданні таблиці, щоб нахилити таблицю (щоб надати ефект 3D-сканування тексту, подібного до сканування відкриття зоряних воєн).

Подивившись навколо, я знайшов це питання target-с CALayer UIView реальне обертання

і здається, що прийнята відповідь робить те, що я хочу, проте, коли я застосовую код до свого TableView, він нічого не робить, і таблиця відображається як зазвичай.

Це код, який я копіюю:

float distance = 50;

CATransform3D basicTrans = CATransform3DIdentity;
basicTrans.m34 = 1.0 / -distance;
_tableView.layer.transform = CATransform3DRotate(basicTrans, M_PI_4, 1.0f, 0.0f, 0.0f);

Я розміщую це у своєму методі viewDidLoad після створення мого масиву Strings (який заповнює tableView)

Наразі у Контролері є лише три інші методи:

didReceiveMemoryWarning (автоматично додається при створенні проекту)

tableView: numberOfRowsInSelection (використовується для налаштування подання таблиці) tableView: cellForRowAtIndexPath (використовується для налаштування подання таблиці та налаштування тексту клітин у масиві)

Моє розуміння полягає в тому, що у перегляду таблиці є аCALayer, і що CATransform3D маніпулює цим, щоб надати представлення виду в 3d-просторі. Якщо моє розуміння правильне, то я не розумію, чому список відображається нормально на екрані? Я ціную цифри, які поки не дають потрібного ефекту, але вони повинні принаймні вплинути на появу табличного перегляду на екрані.

Також я імпортував QuartzCore і т. Д. І додавав їх у пов'язані рамки


Рішення полягає у використанні коду, позначеного як OLD відповідь у методі - (UITableViewCell *) tableView: cellForRowAtIndexPath: метод після перевірки комірки на нульову.

Відповіді:

0 для відповіді № 1

Оскільки запропонований нижче підхід не спрацював, я б спробував ще одне - застосувати перетворення до UITableViewНасправді, UITableView це UIScrollView, тож це просто контейнер для підзаписів, які складають реальний вміст подання таблиці. Я б спробував щось подібне:

for (UIView* subview in tableView.subviews) {
subview.layer.transform = ...;
}

Я ніколи не перевіряв підгляди подання таблиціієрархія, тож я не можу сказати, чи буде це спрацьовувати чи вам слід скоріше застосувати перетворення лише до одного з підпрезентацій, але я сподіваюся, що це може привести вас у правильному напрямку.

СТАРИЙ ВІДПОВІДЬ:

Ви можете спробувати встановити шар перегляду таблиці sublayerTransform замість `перетворення ':

Зазвичай ви використовуєте цю властивість для додаванняперспектива та інші ефекти перегляду для вбудованих шарів. Ви додаєте перспективу, встановивши перетворення підшару на потрібну матрицю проекції. Типовим значенням цього властивості є перетворення ідентичності.

(джерело)

Я пропоную це виходячи з гіпотези, що a UITableView має досить складну структуру з точки зору підзаписів, тому трансформація просто шару подання може не мати ніякого ефекту. Я не пробував цього, хоча не можу гарантувати, що він спрацює.