3

にある の視点を変更しUIViewたいViewcontroller。このUIViewレイヤーを変換しなければならないと思うのですが、方法がわかりません。

次のコードを試しましたが、機能しません

UIView *myView = [[self subviews] objectAtIndex:0];
CALayer *layer = myView.layer;
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -500;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 0.0f, 1.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

次のコードでも試しました。

-(void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGAffineTransform transform = CGAffineTransformIdentity;
    transform.b = -0.1;
    transform.a = 0.9;
    CGContextConcatCTM(ctx,transform);
    // do drawing on the context
}

そしてこれも:

CALayer *layerA = [[self.view.layer sublayers] objectAtIndex:0];


    layerA.transform = CATransform3DConcat(layerA.transform, CATransform3DMakeRotation(DEGREES_TO_RADIANS(45),1.0,0.0,0.0)

どちらも機能しませんでした。の視点を変更するにはどうすればよいUIViewですか?

つまり、例を挙げます。このサンプル コード、回転 Pie RotationPie sampleをイメージしてください。xまたはz軸で、その遠近法を変更したいと思います。

4

1 に答える 1

3

あなたの最初の解決策は私の側で機能します。次のように表示されます。

ここに画像の説明を入力してください

クラスコード全体が同じように機能しない場合は、クラスコード全体を表示できますか?

編集

わかりました。提供されているコード例を再構成して、それがどのように可能かを示します。

(ここから更新されたコード例をダウンロードしてください:http ://www.speedyshare.com/dz469/download/Wheel-demo.zip )

そしてそれはこのように見えます:

ここに画像の説明を入力してください

ベースサブビューにのみ変換を適用しています。そのビューのサブビューであるすべてのビューも同様に変換されます。対応するサブビューに異なる変換を持たせたい場合(新しい変換を計算するには、親ビューの変換を考慮する必要があるため、より困難になります)、非常に困難になる可能性があります。

しかし、私はいくつかの単純なマルチビューレベルの変換を行いました。たとえば、効果を実現するために、そのビューは拡大縮小、移動、回転します。

  • parentViewに移動変換を適用しました
  • parentViewsの最初のサブビューに回転変換を適用しました。
  • parentViewsの最初のサブビューサブビューにスケール変換を適用しました。

編集

さて、ホイールを変形した位置に残すために、提供されたコード例を再構成して、それがどのように可能であるかを示しました。

(ここから更新されたコード例をダウンロードしてください: http ://www.speedyshare.com/5d8Xq/download/Wheel-demo2.zip )

問題は-この場合、ホイール自体に変換を追加していました-そして、ホイールも変換に基づいているようです。したがって、-あなたがそれに触れたとき-それは既存の変換を置き換え、それ自身を適用しました(ユーザーがホイールをスワイプしたときに矢印を回転させるため)。

つまり、操作中に遠近法を維持するには、別のビューレイヤーが必要です。

新しいビュー(親ビューと呼びます)を作成し、このビューにサブビューとしてホイールを追加しました。

次に、ホイールではなく親ビューに変換を適用します。そしてそれは動作します!

私はそれが役立つことを願っています、そしてあなたは今変換についてもっと理解しています:)

于 2012-10-16T10:25:44.240 に答える