/ / Използване на CATransform3D - цел-c, uitableview, catransform3d, catransform3drotate

Използвайки CATransform3D - цел-c, uitableview, catransform3d, catransform3drotate

Опитвам се да направя ротация на табличен изглед, за да накланям таблицата (за да придадем ефект на триизмерен текст, подобен на обхождането при отваряне на звездни войни).

След като се огледах, намерих този въпрос цел-с 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 (който попълва таблицата)

Понастоящем имам само три други метода в контролера:

didReceiveMemoryWarning (автоматично добавяне, когато проектът е създаден)

tableView: numberOfRowsInSelection (използва се за настройка на табличния изглед) tableView: cellForRowAtIndexPath (използва се за настройка на табличния изглед и задаване на текста на клетките от масива)

Моето разбиране е, че таблицата имаCALayer, и че CATransform3D манипулира това, за да даде представяне на изгледа в 3D пространство. Ако разбирането ми е правилно, тогава аз не разбирам защо списъкът се показва нормално на екрана? Оценявам числата, които не давам ефекта, който искам, но те трябва да имат ефект върху външния вид на таблицата на екрана.

Също така съм внесъл QuartzCore и т.н.


Решението е да се използва кода, маркиран като СТАРИ отговор в таблицата - (UITableViewCell *) tableView: cellForRowAtIndexPath: метод, след като клетката се проверява за нула.

Отговори:

0 за отговор № 1

Тъй като подходът, предложен по-долу, не е работил, друго нещо, което бих опитал, е да приложим трансформацията към UITableViewВсъщност, UITableView е UIScrollView, така че това е просто контейнер за подлинии, които съставляват действителното съдържание на табличния изглед. Ще опитам нещо подобно:

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

Никога не съм инспектирал преглед на таблични изгледийерархия, така че не мога да кажа дали това ще работи или бихте предпочели да приложите трансформацията само към един от подвидовете, но се надявам, че това може да ви доведе в правилната посока.

СТАРТ ОТГОВОР:

Можете да опитате да зададете слоя на табличния изглед sublayerTransform вместо „трансформиране“:

Обикновено използвате това свойство, за да добавитеперспектива и други ефекти на гледане към вградените слоеве. Вие добавяте перспектива чрез задаване на трансформацията на подслоя към желаната матрица на проекция. Стойността по подразбиране на това свойство е преобразуването на идентичността.

(източник).

Предполагам, че това се основава на хипотезата, че a UITableView има доста сложна структура по отношение на subviews, така че трансформирането само на слоя на изгледа може да няма ефект.