内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

iOS自定义转场的另一种思路

2018-06-08 18:44 出处:清屏网 人气: 评论(0

iu | 图片来源于网络

传统自定义转场是在两个代理方法 UIViewControllerTransitioningDelegateUINavigationControllerDelegate 中做处理,网上此类分享很多,我今天分享另一种思路。

效果如下:

效果.gif

思路:

  1. 关掉转场动画

  2. 转场之前,先将一个自定义view覆盖在 [[[[UIApplication sharedApplication] delegate] window] 上,再执行转场,但是此时用户看不到转场(实际上已经转场),只能看到这个最顶层的view,你想做什么动画就在这个view上做,做完之后将这个view移除即可。

关键就是在转场前用一个view覆盖在window之上。

DEMO及代码:

demo效果:

demo效果.gif

代码:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    // 在window上覆盖一个白色view
    UIView *whiteView = [[UIView alloc] initWithFrame:self.view.bounds];
    whiteView.backgroundColor = [UIColor whiteColor];
    [[[[UIApplication sharedApplication] delegate] window] addSubview:whiteView];
    
    // 图片
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"phone"]];
    imageView.frame = CGRectMake(0, 300, self.view.frame.size.width, self.view.frame.size.width/2.2);
    [whiteView addSubview:imageView];
    
    // 暗中转场
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:secondVC animated:NO];
    
    // 动画
    [UIView animateWithDuration:0.3 animations:^{
        imageView.frame = CGRectMake(0, 90, self.view.frame.size.width, self.view.frame.size.width/2.2);
    } completion:^(BOOL finished) {
        // 动画结束后移除view
        [whiteView removeFromSuperview];
    }];
}
分享给小伙伴们:
本文标签: 自定义转场

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号