我可以使用动画推送视图并仅更新其内容吗? 我有4个相同的视图,因此我不想创建4个xib,而是想更新视图,但给用户留下他已切换视图的印象。
所以我真的不想推动,我只想给用户留下这样的印象。 这可能吗?
答案 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属性,它可能会更好看