iOS presentView相关

想做一个效果:
present一个VC,不让这个VC完全覆盖之前的界面,还要能看见之前的界面。就像系统的UIAlertViewControlle

阅读 2.4k
1 个回答

可以通过 <UIViewControllerAnimatedTransitioning> 自定义页面转场达到该效果,具体可参考我之前写的一个小项目。

先设置 modalPresentationStylemodalTransitionStyle

// iOS8+
self.modalPresentationStyle = UIModalPresentationCustom;
self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

然后定一个遵从 UIViewControllerAnimatedTransitioning 协议的动画代理对象,并在内部实现以下方法。

@implementation FEPopupMenuControllerAnimatedTransitioning

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext{
    return 0.25;
}

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
}

@end

最后在 VC中 实现 UIViewControllerAnimatedTransitioning 协议,返回钢材定义的转场动画代理对象

#pragma mark <UIViewControllerAnimatedTransitioning>

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
{
    FEPopupMenuControllerAnimatedTransitioning *transitioning = [FEPopupMenuControllerAnimatedTransitioning new];
    return transitioning;
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
    FEPopupMenuControllerAnimatedTransitioning * transitioning = [FEPopupMenuControllerAnimatedTransitioning new];
    return transitioning;
}

详情可参考:Feelinging/FEPopupMenuController

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进