我在故事板中定义了一个常规的全屏视图控制器。它没有导航控制器。当用户点击一个按钮时,我想展示另一个包装在导航控制器中的视图控制器。目前我正在使用模态segue。我希望使用“推”样式从右侧发生这种模态转换。我将自己处理“返回”/弹出事件。
到目前为止,我还无法弄清楚这一点。当没有导航控制器时,是否有一些自定义 segue 类可以模拟推送?
我在故事板中定义了一个常规的全屏视图控制器。它没有导航控制器。当用户点击一个按钮时,我想展示另一个包装在导航控制器中的视图控制器。目前我正在使用模态segue。我希望使用“推”样式从右侧发生这种模态转换。我将自己处理“返回”/弹出事件。
到目前为止,我还无法弄清楚这一点。当没有导航控制器时,是否有一些自定义 segue 类可以模拟推送?
我通常使用一种技术来计算屏幕尺寸。然后,为屏幕中心、屏幕右侧和屏幕左侧计算出一个矩形,然后制作动画。
这段代码是一个动画函数,就好像一个新视图将当前视图推到左边一样。viewComing
是即将进入视野的视野。viewGoing
是当前可见的视图。
- (void) animateToLeft:(UIView*)viewComing andViewGoing:(UIView*)viewGoing {
CGRect screenRect = [UIScreen mainScreen].bounds;
CGRect left = screenRect;
CGRect center = screenRect;
CGRect right = screenRect;
left.origin.x -= screenRect.size.width;
right.origin.x += screenRect.size.width;
viewGoing.frame = center;
viewComing.frame = right;
[UIView animateWithDuration:0.4 animations:^{
viewComing.frame = center;
viewGoing.frame = left;
}];
}
您可以使用它自己的导航控制器,并且有一个用于隐藏导航栏的属性,请参见this。寻找导航栏隐藏。
试试这段代码:
UIViewController *sourceViewController = self ;
UIViewController *destinationController = objdestinationViewController;
CATransition* transition = [CATransition animation];
transition.duration = .25;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
transition.subtype = kCATransitionFromRight; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
[self.view.layer addAnimation:transition forKey:kCATransition];
[self.view addSubview:destinationController.view];