1

UIViewに(2つの消失点を持つ)遠近法を追加する方法でUIViewを変換したいと思います(以下を参照)。

変換が適用されたUIView

ビューでこれを実行する理由は、変換されたビューのコンテンツをUITableViewのセルにしたいためです。

この種のコーディングは初めてですが、サブビューに属するCALayerを変更する必要があると思います。ただし、興味のある変換はCATransform3Dを使用して作成することはできないと思います。

誰かがこの問題に取り組む方法を知っていますか?

4

1 に答える 1

1

問題を回避/解決する方法を見つけたようです。

CATransform3D変換を使用すると、ビューを2つの部分(2つの独立したUITableView)に分割することで、見晴らしの良いポイントを概算できます。これらは、必要なプロトコルを実装するUIViewController(xコードによって提供されるUITableViewControllerではない)によって管理する必要があります。

次に、viewDidLayoutSubviews:メソッドで、次のコードを使用して2つのテーブルビューを変換します。

- (void) viewDidLayoutSubviews {

     CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
    // left View
    // vantage point
    rotationAndPerspectiveTransform.m34 = 1.0 / -150.0;
    // Z-rotation of 90°
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 90.0 * M_PI/180.0, 0, 0,1);
    // X-rotation of 25°
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -25.0 * M_PI/180.0, 1, 0,0);
    // left view
    [self.view viewWithTag:1].layer.transform = rotationAndPerspectiveTransform;


    //right view
    rotationAndPerspectiveTransform = CATransform3DIdentity;
    rotationAndPerspectiveTransform.m34 = 1.0 / -150;
    // Z-rotation of 90°
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 90.0 * M_PI / 180.0, 0, 0,1);
    // X-rotation of 30°
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 25.0 * M_PI / 180.0, 1, 0,0);
    // right view
    [self.view viewWithTag:2].layer.transform = rotationAndPerspectiveTransform;
}

変換すると、2つのテーブルビューをシフトして、きちんと合わせることができます。残っている唯一の仕事は、一方のテレビのスクロールをもう一方のテレビに接続することです。私はまだそれを理解していません。

于 2013-03-04T22:13:52.453 に答える