使用CATransition从右向左和向后过渡?

时间:2011-10-25 12:40:57

标签: iphone objective-c ios

我有一个uitabbarcontroller,它由五个uiviewcontrollers组成。

当我点击第一个uiviewcontroller视图中的按钮时,我想要隐藏uiviewcontroller,并添加一个从右到左过渡的新uiviewcontroller。我已经实现了这一点但是当我点击新视图上的按钮时,应用程序崩溃!按钮没有附加代码。我收到EXEC_BAD_ACCESS错误。

有谁知道为什么会发生这种情况以及如何用新视图解决这个问题?

当我尝试模态视图转换时,视图功能正常。当我尝试使用CATransition时会发生这种情况。我需要CATransition,因为模态视图转换没有从右到左或从左到右的过渡!

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:5)

这是在tabviewcontroller的Uiview和新的uiview之间进行转换所需的代码。代码转到按钮的IBAction,它存在于tabviewcontroller的一个uiviews中。

//初始化app delegate

AppDelegate appDelegate =(AppDelegate )[[UIApplication sharedApplication] delegate];

//获取当前显示的视图

UIView * currentView = self.view;

//获取底层UIWindow或包含当前视图视图的视图

UIView * theWindow = [currentView superview];

// remove the current view and replace with mynewView1
[currentView removeFromSuperview];

//将新视图分配给viewcontroller1。它是uitabbarcontroller的第一个uiviewcontroller。我的uitabbarcontroller在我的项目中包含五个uiviewcontrollers。 该按钮存在于第一个viewcontroller1中,这就是我将新视图分配给viewcontroller1的原因。如果从我的uitabbarcontroller的secondviewcontroller(viewcontroller2)按下按钮,我会将新视图分配给secondviewcontroller(viewcontroller2),依此类推......

appDelegate.viewController1=[[MyMessages alloc] initWithNibName:@"MyMessages" bundle:nil];

//将其添加到窗口

[theWindow addSubview:appDelegate.viewController1.view];

// set up an animation for the transition between the views
CATransition *animation = [CATransition animation];
[animation setDuration:0.5];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

[[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"];

谢谢你的帮助!我已经尝试了一天以上来实现它。我希望它可以帮助有同样问题的人。

答案 1 :(得分:0)

我认为你可能没有正确地保留新的视图控制器。 但是有没有理由你不使用UINavigatonController和pushViewController / popViewController?这会让事情变得更容易

答案 2 :(得分:0)

你可能在发布“新视图”时遇到问题,你的意思是视图控制器,而不是控制器的视图。

我猜你正在尝试这样的事情(或者只是举例):

UIViewController *newVC=[[UIViewController alloc] init...];
[UIView beginAnimations:@"animId" context:nil];
[UIVIew transitionFromView:old.view toView:newVC.view duration:0.3f options:nil completion:nil];
[UIView commitAnimations];
[newVC release]

您释放新的视图控制器(插入子视图不会增加retainCount),因此当您执行操作(点按按钮)时,目标(newVC)已经释放,这会产生此错误。

因此,您需要做的就是创建对此视图控制器的引用(例如,将其分配给某个保留属性)。当您以模态方式执行此操作时,显示模态的视图控制器会自动将引用保留在self.modalViewController中。