美文网首页
(抄)页面转场动画

(抄)页面转场动画

作者: MSG猿 | 来源:发表于2016-06-22 11:41 被阅读78次

    http://www.devqinwei.com/2015/10/27/页面转场动画/

    1.模糊放大fade away 效果

    代码:

    +(void)changeRootViewControllerWithStyleBlur:(UIViewController *)viewController inMainWindow:(UIWindow *)mainWindow{

    if (!mainWindow.rootViewController) {

    mainWindow.rootViewController = viewController;

    return;

    }

    UIView *snapShot = [mainWindow snapshotViewAfterScreenUpdates:YES];

    [viewController.view addSubview:snapShot];

    mainWindow.rootViewController = viewController;

    [UIView animateWithDuration:0.5 animations:^{

    snapShot.layer.opacity = 0;

    snapShot.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1.5);

    } completion:^(BOOL finished) {

    [snapShot removeFromSuperview];

    }];

    }

    2. 水平翻转效果

    代码:

    + (void)changeRootViewControllerWithStyleFlip:(UIViewController*)viewController  inMainWindow:(UIWindow *)mainWindow{

    if (!mainWindow.rootViewController) {

    mainWindow.rootViewController = viewController;

    return;

    }

    [UIView transitionWithView:mainWindow

    duration:0.5f

    options:UIViewAnimationOptionTransitionFlipFromLeft

    animations:^{ mainWindow.rootViewController = viewController; }

    completion:nil];

    }

    3. 仿twitter logo放大退隐动画

    效果:

    注:这个是写在navigationController上的,如果window的rootViewController是tabbarController,则需要做调整。(参考Kitten Yang的《A guide to iOS animation》)

    代码:

    @implementation ViewController

    - (void)viewDidLoad {

    [super viewDidLoad];

    // 设置navigationController 的 mask动画

    self.navigationController.view.layer.mask = [CALayer layer];

    self.navigationController.view.layer.mask.contents = (id)[UIImage imageNamed:@"star"].CGImage;

    self.navigationController.view.layer.mask.position = self.view.center;

    self.navigationController.view.layer.mask.bounds = CGRectMake(0.0f, 0.0f, 300.0f, 300.0f);

    CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"bounds"];

    keyFrameAnimation.delegate = self;

    keyFrameAnimation.duration = 1.0f;

    keyFrameAnimation.beginTime = CACurrentMediaTime() + 1.0f;

    NSValue *initialBounds = [NSValue valueWithCGRect: self.navigationController.view.layer.mask.bounds];

    NSValue *secondBounds = [NSValue valueWithCGRect:CGRectMake(0.0f, 0.0f, self.navigationController.view.layer.mask.bounds.size.width - 40.0f , self.navigationController.view.layer.mask.bounds.size.height - 40.0f)];

    NSValue *finalBounds = [NSValue valueWithCGRect:CGRectMake(0.0f, 0.0f, 2000.0f, 2000.0f)];

    keyFrameAnimation.values = @[initialBounds,secondBounds,finalBounds];

    keyFrameAnimation.keyTimes = @[@0, @0.5, @1];

    keyFrameAnimation.timingFunctions = @[[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut] ];

    keyFrameAnimation.removedOnCompletion = NO;

    keyFrameAnimation.fillMode = kCAFillModeForwards;

    [self.navigationController.view.layer.mask addAnimation:keyFrameAnimation forKey:@"maskAnimation"];

    // 设置一个在navigationController的layer和mask之间的白色隔层(注意,view如果添加subView,那么这个subView是在mask与view之间)

    __block UIView *whiteView = [[UIView alloc] initWithFrame:self.navigationController.view.frame];

    whiteView.backgroundColor = [UIColor whiteColor];

    [self.navigationController.view addSubview:whiteView];

    [self.navigationController.view bringSubviewToFront:whiteView];

    // 设置navigationController的动画

    [UIView animateWithDuration:0.25 delay:1.3 options:0 animations:^{

    self.navigationController.view.transform = CGAffineTransformMakeScale(1.05, 1.05);

    whiteView.alpha = 0.8f;

    } completion:^(BOOL finished) {

    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

    self.navigationController.view.transform = CGAffineTransformIdentity;

    whiteView.alpha = 0.0f;

    } completion:nil];

    }];

    }

    相关文章

      网友评论

          本文标题:(抄)页面转场动画

          本文链接:https://www.haomeiwen.com/subject/iftndttx.html