更新模拟推送的NavigationController的视图

时间:2012-02-06 15:49:29

标签: iphone ios view uinavigationcontroller xib

我可以使用动画推送视图并仅更新其内容吗? 我有4个相同的视图,因此我不想创建4个xib,而是想更新视图,但给用户留下他已切换视图的印象。

所以我真的不想推动,我只想给用户留下这样的印象。 这可能吗?

3 个答案:

答案 0 :(得分:4)

这个(imho)的最佳方法是在没有动画的情况下弹出当前视图,然后立即再次推送相同的视图。

myNavigationController = self.navigationController;
[myNavigationController popViewControllerAnimated:NO];
[myNavigationController pushViewController:myViewController animated:YES];

这是我用来提供无限数量视图效果的技术的一部分,而实际上只使用/保留一个在内存中。

当想要处理“后退”导航时,你会推动一个没有动画的新导航,然后用动画弹出它。

myNavigationController = self.navigationController;
[myNavigationController pushViewController:myViewController animated:NO];
[myNavigationController popViewControllerAnimated:YES];

答案 1 :(得分:1)

我设置了一个简单的项目,中间有一个VC和按钮来触发动画。这是绑定到按钮的代码:

- (IBAction)pushNewView:(id)sender {
[UIView animateWithDuration:0.5 animations:^{
    // this moves the view off screen to the left
    self.view.frame = CGRectMake(-320, 0, 320, 480);
} completion:^(BOOL finished) {
    // this pops the view over to the right side of the screen
    self.view.frame = CGRectMake(320, 0, 320, 480);
    [UIView animateWithDuration:0.5 animations:^{
        // and this slides it in from the right
        self.view.frame = CGRectMake(0, 0, 320, 480);
    }];
}]; }

您可以使用时间来使其看起来更“原生”,并使用前面提到的alpha。您可以在两个动画块中的任何一个中更改它。

答案 2 :(得分:0)

您可以将一个视图设置为左侧动画,同时为右侧的下一个视图设置动画,这与推送相同(假设下一个视图和当前视图已经是子视图)

UIView *nextView.frame = CGRectOffset(self.view.frame, self.view.frame.size.width, 0.0f);

[UIView animateWithDuration:0.3f animations:^{
    currentView.frame = CGRectOffset(currentView.frame, -self.view.frame.size.width, 0.0f);
    nextView.frame = CGRectOffset(nextView.frame, -self.view.frame.size.width, 0.0f);
}];
如果您尝试更改视图的alpha属性

,它可能会更好看