1

テーブルビューを回転させてテーブルを傾けようとしています(スターウォーズのオープニングクロールに似た3Dテキストクロールの効果を与えるため)。

周りを見回した後、私はこの質問を見つけましたObjective-с 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);

文字列の配列を作成した後(tableViewにデータを入力する)、これをviewDidLoadメソッドに配置しています

現在、コントローラーには他に 3 つのメソッドしかありません。

didReceiveMemoryWarning (プロジェクトの作成時に自動的に追加されます)

tableView: numberOfRowsInSelection (テーブル ビューの設定に使用) tableView: cellForRowAtIndexPath (テーブル ビューの設定と配列からのセル テキストの設定に使用)

私の理解では、テーブルビューには CALayer があり、CATransform3D はこれを操作して 3D 空間でのビューの表現を提供します。私の理解が正しければ、リストが画面に正常に表示される理由がわかりませんか? 私はまだ私が望む効果を与えていない数字に感謝していますが、画面上のtableViewの外観には少なくとも影響を与えるはずです。

また、QuartzCoreなどをインポートして、リンクされたフレームワークに追加しました


解決策は、セルがnullであることを確認した後、 - (UITableViewCell *)tableView: cellForRowAtIndexPath: メソッドでOLD answerとしてマークされたコードを使用することです。

4

1 に答える 1

0

以下に提案するアプローチは機能しなかったので、私が試してみるもう1つのことは、UITableViewのサブビューに変換を適用することです。実際にUITableViewは、はUIScrollViewであるため、テーブルビューの実際のコンテンツを構成するサブビューの単なるコンテナです。私はこのようなことを試みます:

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

テーブルビューのサブビュー階層を調べたことがないので、これが機能するかどうか、またはサブビューの1つだけに変換を適用する必要があるかどうかはわかりませんが、これが正しい方向につながることを願っています。

古い答え:

sublayerTransform`transform'の代わりにテーブルビューのレイヤーを設定してみてください。

通常、このプロパティを使用して、埋め込みレイヤーに遠近法やその他の表示効果を追加します。サブレイヤー変換を目的の射影行列に設定することにより、遠近法を追加します。このプロパティのデフォルト値はID変換です。

ソース)。

UITableViewこれは、サブビューに関しては非常に複雑な構造であるため、ビューのレイヤーだけを変換しても効果がない可能性があるという仮説に基づいて提案しています。ただし、試したことはないので、動作を保証することはできません。

于 2013-02-03T18:33:34.187 に答える