Masonry学习之基本动画

先看效果:

这里写图片描述

动画说明:

这个简单动画的实质就是三个视图之间及三个视图与父视图之间的距离由10到100的重复不断的变化。

代码说明:

将需要做动画的约束保存起来:

[self.animatableConstraints addObjectsFromArray:@[
                                                          make.edges.equalTo(superview).insets(paddingInsets).priorityLow(),
                                                          make.bottom.equalTo(blueView.mas_top).offset(-padding),
                                                          ]];

子视图添加之后,设置动画标记为YES,并调用动画方法,传入参数NO,表示初始状态是由10->100,而不是由100->10:

- (void)didMoveToWindow {
    [self layoutIfNeeded];

    if (self.window) {
        self.animating = YES;
        [self animateWithInvertedInsets:NO];
    }
}
- (void)willMoveToWindow:(UIWindow *)newWindow {
    self.animating = newWindow != nil;
}

实现动画:

- (void)animateWithInvertedInsets:(BOOL)invertedInsets {
    // 动画标记为NO,不执行动画
    if (!self.animating) return;

    // 如果是反向,则间距为100;如果不是,则使用当前记录的值
    int padding = invertedInsets ? 100 : self.padding;
    // 设置新的间距给约束
    UIEdgeInsets paddingInsets = UIEdgeInsetsMake(padding, padding, padding, padding);
    for (MASConstraint *constraint in self.animatableConstraints) {
        constraint.insets = paddingInsets;
    }
    // 执行动画
    [UIView animateWithDuration:1 animations:^{
        [self layoutIfNeeded];
    } completion:^(BOOL finished) {
        //repeat!
        [self animateWithInvertedInsets:!invertedInsets];
    }];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值