翻转查看Iphone

时间:2009-05-09 15:55:20

标签: iphone flip

请考虑下面的代码,并告诉我我做错了什么。

我想在两个UIViews之间翻转。

不知何故,当我从初始视图中移开时,我只是得到翻转的视图,没有动画。当我回头时,动画显示得很好。

翻转是从视图本身的按钮触发的。

- (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];

}

3 个答案:

答案 0 :(得分:17)

这可能是因为您没有使用容器视图作为转换视图。请参阅setAnimationTransition:forView:cache:

上的文档
  

如果要在转换期间更改视图的外观 - 例如,从一个视图翻转到另一个视图 - 然后使用容器视图,UIView的实例,如下所示:

     
      
  1. 开始动画块。
  2.   
  3. 在容器视图上设置转场。
  4.   
  5. 从容器视图中删除子视图。
  6.   
  7. 将新子视图添加到容器视图中。
  8.   
  9. 提交动画块。
  10.   

尝试在self.view.superview

的动画转换视图中使用showMoreInfo:

showLessInfo:方法的工作原理是您正在使用容器视图。

答案 1 :(得分:12)

你可以使用你的MainWindow(UIWindow)作为UIView的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];

答案 2 :(得分:0)

在iOS 4.0之后,您可以使用以下内容在视图之间切换:

[UIView transitionFromView:sourceView toView:destinationView duration:0.35f options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) {
    NSLog(@"I just flipped!");
}];

正如Jason所说,你需要在容器视图中进行此操作。