2011-01-16 6 views
8

横向きで正しく動作しません。アニメーション遷移は私のアプリは、風景右方向をサポートしてい

私はビューコントローラのビューに移行しようとしていますが、トランジションアニメーション(カールアップなど)を実行すると、ビューは90度回転します(したがって、シミュレータはまだ横長の向きですがビューは90度回転して表示されます)。トランジションが終了すると、正しい方向に回転します。私のコードは以下の通りです。

- (IBAction)buttonTouched 
{ 
    MyViewController *aViewController = [[MyViewController alloc] initWithNibName:NSStringFromClass([MyViewController class]) bundle:nil]; 

    [UIView transitionFromView:self.view 
         toView:aViewController.view 
         duration:2 
         options:UIViewAnimationOptionTransitionCurlUp 
        completion:NULL]; 
} 

取得していないビュー通知「の向きが変わる」かのようにそれが表示されますので、それは肖像画でそれを提示し、その後、アニメーション終了後に風景に変わります。私はIBでそれを設定したので、すべてがランドスケープにレイアウトされています。

編集:私も同じ事が起こった(多分それは、初期化と遷移の間にあまりにも近くにあった思考)自己のIBファイルにビューコントローラを追加し、そのビューに移行しようとしました。

答えて

16

まあ、主な理由は、(現在は「知っている」あなたは風景の中にいること)、その情報を持っていない新しいビューに置き換えられていることself.viewです。そのため、aViewController.viewをself.viewのサブビュー(aViewControllerが不透明であると仮定)にするだけです。ああ、あなたは言うが、私はtransitionFromViewの素敵なアニメーションを失う。さて、このnice値を試してみてください。

[UIView transitionWithView:self.view 
        duration:2 
        options:UIViewAnimationOptionTransitionCurlUp 
       animations:^{ 
        [self.view addSubview:aViewController.view]; 
       } 
       completion:NULL]; 

あなたのために動作しません何らかの理由で、代替はそれが本当に風景ビューだとaViewController.viewを「教える」のであれば:

#define DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__)/180.0 * M_PI) 
-(void)setNewViewToLandscape:(UIView*)viewObject { 
    //assumes self.view is landscape and viewObject is portrait 
    [viewObject setCenter:CGPointMake(self.view.frame.size.width/2,self.view.frame.size.height/2)]; 
    CGAffineTransform cgCTM = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(90)); 
    viewObject.transform = cgCTM; 
    viewObject.bounds = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height); 
} 

MyViewController *aViewController = [[MyViewController alloc] initWithNibName:NSStringFromClass([MyViewController class]) bundle:nil]; 
[self setNewViewToLandscape:aViewController.view]; 

[UIView transitionFromView:self.view 
        toView:aViewController.view 
        duration:2 
        options:UIViewAnimationOptionTransitionCurlUp 
       completion:NULL]; 

ワンあなたのaViewControllerが漏洩していることをもう少し知っているので、それを親viewControllerの保持されたプロパティにする必要があります。

+0

うわー...素晴らしい答えです。ありがとう! – Ned

+0

本当に重要な答えは、私の日を救った! – BootMaker

+0

私の一日も保存されていますが、2番目のオプションに小さな誤植があります。[self setViewToLandscape:aViewController.view];次のようにする必要があります:[self setNewViewToLandscape:aViewController.view];あなたの命名規則を使って。また、あなたの新しいビューコントローラが風景の中にある場合にだけ、ここで幅と高さを入れ替える:[ビュー・オブジェクトsetCenter:CGPointMake(self.view.frame.size.width/2、self.view.frame.size.height/2)]; (それはそれが適切に中心化されるでしょう) – Dado

関連する問題