0

我不知道为什么我的 NewViewController 正在获取我的 ViewController 的动画。我的 NewViewController.xib 中的所有内容都表现得很奇怪。例如,我的 UITableView 很容易在动画和其他对象中弹出。我检查了我的 NewViewController,它没有连接到我的 ViewController。如果您对如何阻止这种情况有任何建议,我将不胜感激。

视图控制器.m

 - (void)viewDidLoad
 {
[super viewDidLoad];
 [self start];
  }

 -(void)start{
CGContextRef *imageContext = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:imageContext];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDelegate:self];
image.alpha = 1;
image1.alpha = 1;
[self performSelector:@selector(change) withObject:nil afterDelay:3];
  }


 -(void)change{
  NewViewController *newViewController = [[NewViewController alloc]init];
  [self.navigationController pushViewController:newViewController animated:NO];
  }
4

2 回答 2

0

您的新视图控制器在视图控制器的动画期间被推送。因此,您得到影响新控制器的结果也就不足为奇了。您需要将新视图控制器的创建和演示移出动画。

另外,我看不到您在哪里调用[UIView commitAnimations]以正确完成动画块。

viewDidLoad此外,当视图可能还不可见时,您正在调用界面动画,同样会产生不可预测的结果。相反,您应该在viewDidAppear.

于 2013-10-19T16:00:13.550 回答
0

澄清一下,您的 NewViewController 是如何出现的?

听起来您为它设置了一个 nib 文件,但随后在代码中使用 init 调用它,而不是 initWithNibNamed。

听起来您也可能在您的 navigationController 的笔尖中包含了一个 NewViewController 的实例,尽管我不能完全从您的陈述中判断是否是这种情况。

总而言之,看起来您可能正在使用 2 或 3 种不同的方式来创建 NewViewController 的实例,而您只需要执行一次。

我会冒险假设您想使用您制作的自定义设计的 NewViewController.xib 文件。如果是这样,你会想要这样做:

  1. 确保导航控制器中没有带有 NewViewController 类的 ViewController 对象。

  2. 从技术上讲,您不必将属性或实例变量添加到类型为 NewViewController 的类中,因为一旦您推送,navigationController 将接管保留计数,但是您很有可能希望将 NewViewController 范围限定为您的无论如何都要上课以稍后处理事件/重用等...

  3. 当您创建 NewViewController 的实例时,像这样从 nib 实例化它(注意我假设您已经声明了 @property (strong, nonatomic) NewViewController* nvc;)

-

nvc = [[NewViewController alloc] initWithNibNamed:@"nameOfNibGoesHereWithoutAppendingDotXib" bundle:[NSBundle mainBundle]];

现在,当 newViewController 加载时,您应该会看到它的行为就像您在 Nib 中布置的那样。

我在这里做了很多假设,请随时根据需要更正和重定向您的问题,我们会尽力提供帮助!

于 2013-10-19T16:10:02.270 回答