UIView动画不起作用

4
我有以下代码来执行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];

1
如果您删除动画块,视图转换是否会正确进行(显然没有动画)?我想知道详细视图是否有效? - RedBlueThing
4个回答

1

我经常在教程中看到你的代码,但它从来没有对我起作用。我总是使用以下代码:

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

[mainViewController presentModalViewController:viewControllerToSwitchTo animated: YES];

你可以使用以下代码设置视图切换样式:

[setModalTransitionStyle:WhateverModalTransitionStyleYouWant];

但请确保这在转换方法之前执行。


1
我觉得你的顺序错了。在添加新的子视图之前,你需要先删除旧的子视图。
可以参考 setAnimationTransition:forView:cache:。
也可以在视图的层上使用 CATransition,然后使用层动画。
如果你特别想要翻转新视图,还可以使用 uiviewcontroller 的 presentalModalViewController 方法。

1

代码行不通。来自 Apple 的文档:

如果您想在转换期间更改视图的外观,例如从一个视图翻转到另一个视图,则可以使用一个容器视图 (UIView 实例):

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

因此,转换应该应用于 self 而不是 mapView,而您的 add/remove 的顺序是相反的。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接