使用自定义动画推出视图控制器

3

是否可以创建一个自定义的push视图控制器动画,就像图片中所示?基本思路是正常推送视图,但不移动当前调用pushViewController...的视图。

2个回答

0

可以的,这是可以做到的。我曾经做过一个项目,就是这样实现的:

-(void)slideInController:(RDSlideController *) next {
    next.presentingVC = self;
    next.view.frame = CGRectMake(self.view.frame.origin.x + 320, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
    [self.view.window addSubview:next.view];
    [UIView animateWithDuration:slideTime animations:^{
        next.view.frame = self.view.frame;
    } completion:^(BOOL finished) {
        self.view.window.rootViewController = next;
    }];
}

我滑入的视图控制器是RDSlideController的子类(这样我就可以拥有presentingVC属性和其他一些东西),但这并不是必要的。基本上,你只需要实例化新的控制器,将其视图的框架设置为屏幕右侧,将该视图添加到窗口中,然后将框架动画到当前视图的框架。最后,你切换视图控制器,使新的视图控制器成为窗口的根视图控制器。

顺便提一下,在iOS中,slideTime几乎总是0.4秒。 - Enrico Susatyo
那就是答案了。我不知道[UIView window]属性。谢谢。 :-) - user1388320
有没有简单的方法来 dismiss,还是我必须将视图框架移动到屏幕外? - user1388320
@Alberto,不,没有简单的方法可以解雇。旧视图不再存在,因此您需要获取旧控制器,将其视图插入当前视图下方(按顺序),然后滑动当前视图。 - rdelmar
@rdelmar 没问题。无论如何,这是一个聪明的解决方案(适用于两个问题)。谢谢。 :-) - user1388320

0
我们可以通过添加子视图并对要添加的视图进行动画来实现这一点。 当我们添加时,给予动画以将下一个视图从左边缘移动到右边缘。删除视图时反之亦然。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接