我正在调用turnView方法,他必须获得dissapear menuView(当前)并且可能会显示adjustView。当调用方法时,它执行时没有错误,但它不切换视图,menuView保持并返回到方法调用的下一行。怎么解决?感谢
从menuView调用:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
aboutTabController * myObject = [[aboutTabController alloc] init];
if (indexPath.section == 1) {
switch (indexPath.row) {
case 0:
[myObject turnView];
break;
case 1:
//
break;
default:
break;}
}
}
在控制器上实现的方法,menuController是为menuView类定义的:
- (void) turnView
{
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
if (self.adjustController == nil)
{
adjustView *aController = [[adjustView alloc] initWithNibName:@"adjustView" bundle:nil];
self.adjustController = aController;
[aController release];
}
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
[self.menuController viewWillDisappear:YES];
[self.adjustController viewWillAppear:YES];
[self.menuController.view removeFromSuperview];
[self.view insertSubview:adjustController.view atIndex:0];
[self.menuController viewDidDisappear:YES];
[self.adjustController viewDidAppear:YES];
[UIView commitAnimations];
}
答案 0 :(得分:0)
您的代码中存在一些主要的概念问题,让我尝试逐一解决它们:
didSelectRowAtIndexPath:
无论选择哪一行,您都在创建一个新的视图控制器。您应该只在需要时创建它。另外,如果和switch语句非常复杂且难以阅读。
调用委托方法
方法viewWillAppear:
viewDidDisappear:
等可供您捕捉这些事件,而不是自己调用它们。在某些情况下这可能有意义,但它们对动画块完全没有影响。
使用块动画或使用内置动画
您应该使用新的块语法进行动画制作。但是,只需翻转到下一个视图,您就可以使用Apple的官方API,而无需编写自己的动画。
因此,
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section==1 && indexPath.row==0) {
adjustView *aController = [[adjustView alloc] initWithNibName:@"adjustView" bundle:nil];
aController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:aController animated:YES];
[aController release];
}
}
您可以通过调用[self dismissModalViewControllerAnimated:YES]
来摆脱控制器,动画将自动转向另一个方向。