UIView动画无效

时间:2010-03-27 03:54:50

标签: iphone iphone-sdk-3.0 animation uiview

我有以下代码来执行UIView动画:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:mapView.view cache:NO];
[self addSubview:detailView];
[mapView removeFromSuperview];
[UIView commitAnimations];

当我不添加detailView时它可以工作。 实际发生的事情相当于:

[self addSubview:detailView];
[mapView removeFromSuperview];

4 个答案:

答案 0 :(得分:1)

我认为你订单错了。您需要先删除旧的子视图,然后才能添加新的子视图。

参见setAnimationTransition的参考:forView:cache:

您还可以在视图图层上使用CATransition。然后使用图层动画。

如果你特意要翻转新视图,你也可以使用uiviewcontroller的presentalModalViewController方法。

答案 1 :(得分:1)

我一直在教程中看到你的代码,但从来没有对我有用。我一直用这个:

UIViewController *mainViewController = [[YourMainViewController alloc] init];
UIViewController *viewControllerToSwitchTo = [[ViewControllerToSwitchTo alloc] init];

[mainViewController presentModalViewController:viewControllerToSwitchTo animated: YES];

您可以使用以下方式设置视图更改样式:

[setModalTransitionStyle:WhateverModalTransitionStyleYouWant];

但请确保在转换方法之前执行此操作。

答案 2 :(得分:1)

该代码不起作用。来自Apple的文档:

  

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

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

因此,转换应该应用于self而不是mapView,并且您的添加/删除顺序相反。

答案 3 :(得分:0)

我必须将图形上下文设置为UIGraphicsGetCurrentContext()