我有以下代码来执行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];
答案 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的实例,如下:
- 开始动画块。
- 在容器视图上设置转场。
- 从容器视图中删除子视图。
- 将新子视图添加到容器视图中。
- 提交动画块。
醇>
因此,转换应该应用于self而不是mapView,并且您的添加/删除顺序相反。
答案 3 :(得分:0)
我必须将图形上下文设置为UIGraphicsGetCurrentContext()