15

以下のコードを検討して、私が間違っていることを教えてください。

2 つの UIView を切り替えたい。

どういうわけか、最初のビューからフリップすると、アニメーションなしでフリップされたビューが表示されます。裏返すと、アニメーションは問題なく表示されます。

フリップは、ビュー自体のボタンからトリガーされます。

- (IBAction)showMoreInfo:(id)sender
{
    UIView *moreInfo = self.flipView;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];

    UIView *parent = self.view.superview;
    [self.view removeFromSuperview];

    [parent addSubview:moreInfo];

    [UIView commitAnimations];

}



- (IBAction)showLessInfo:(id)sender
{
    UIView *lessInfo = self.view;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationBeginsFromCurrentState:NO];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.flipView cache:YES];

    UIView *parent = self.flipView.superview;
    [self.flipView removeFromSuperview];

    [parent addSubview:lessInfo];

    [UIView commitAnimations];

}
4

3 に答える 3

17

おそらく、遷移ビューとしてコンテナー ビューを使用していないことが原因です。setAnimationTransition:forView:cacheに関するドキュメントを参照してください。

遷移中にビューの外観を変更する場合 (たとえば、あるビューから別のビューに切り替えるなど) は、次のように UIView のインスタンスであるコンテナー ビューを使用します。

  1. アニメーション ブロックを開始します。
  2. コンテナ ビューでトランジションを設定します。
  3. コンテナー ビューからサブビューを削除します。
  4. 新しいサブビューをコンテナー ビューに追加します。
  5. アニメーション ブロックをコミットします。

self.view.superviewのアニメーション遷移ビューで使用してみてくださいshowMoreInfo:

メソッドが機能する理由はshowLessInfo:、コンテナ ビューを使用しているためです。

于 2009-05-09T16:11:41.667 に答える
12

UIView からの UIWindow 継承として、MainWindow (UIWindow) をコンテナー ビューとして使用できますか?

また、iPhone 3.0 では、presentModalViewController メソッドを介してフリップ トランザクションが導入されました。

CustomViewController *vc = [[CustomViewController alloc]
    initWithNibName:@"CustomViewController" bundle:nil];

vc.delegate = self;

// The magic statement. This will flip from right to left.
// present the modal view controller then when you dismissModalViewController
// it will transition flip from left to right. Simple and elegant.
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

[self presentModalViewController:vc animated:YES];

[vc release];
于 2010-01-21T00:29:45.757 に答える