2

viewWillAppearの変換 (Monotouch コード) を使用してビューの一部を調整したい:

CATransform3D oTransform3D = CATransform3D.Identity;
oTransform3D.m34 = 1.0f / -400;
oTransform3D = oTransform3D.Translate( 110, 0, 0);
oTransform3D = oTransform3D.Rotate( (-70f) * (float)Math.PI / 180f, 0, 1, 0);   

ただし、これにより、ビューが画面の左端にレンダリングされます。まったく同じコードを に入れると、viewDidAppear動作します。すべてのビューが有効なサイズであることを確認済みです。

4

2 に答える 2

1

これを理解したことがありますか?UIViewController のルート ビューの直接のサブビューに適用すると、3D 変換が動作しないという同様の状況に遭遇しました。私にとっての回避策は、サブビューを別のコンテナー UIView にラップすることでした。

これらの行に沿ったもの:

- (void)viewDidLoad {
    [super viewDidLoad];
    UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
    container.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoResizingFlexibleHeight;
    [self.view addSubview:container];

    self.myCrazyFlippingSpinningView = [[CrazyFlippingSpinningView alloc] init];
    [container addSubview:self.myCrazyFlippingSpinningView];
}

もちろん、私はそれをしなくてもいいと思います。それはそのようなハックです。誰かがこれに遭遇し、より良い解決策を持っている場合は、ぜひご覧ください。

ありがとう!

于 2012-06-20T16:42:50.293 に答える
0

質問を完全に理解しているのかわかりませんが、盗品を取ります。

CATransform3Dには、変換が参照する消失点があります。消失点は常に、変換されたビューを配置するビューのx、y中心点です。3D変換の問題に苦労して予期しない結果が得られたときは、コンテナビューのサイズと中心点を確認するだけで、常に解決されました。

あなたはあなたのコードがViewDidLoadで機能すると言います...それはあなたが変換されたビューをベースビューに追加していることを意味しますか?のように:this.View.AddSubview(yourTransformedView); ??

つまり、あなたの問題はViewWillAppearとViewDidLoadの問題ではないと思います。変換をビューに適用してから、ビューをベースビューまたはその他のスーパービューに追加するコードを見た場合、何が起こっているのかをすばやく伝えることができると思います。

于 2012-03-01T19:27:21.470 に答える