用递归算法实现iOS补位动画

2018-12-02  本文已影响37人  迷路的安然和无恙

用递归算法实现iOS补位动画

前言

写这个动画,主要是为了运用递归算法。
需求如下:
效果如下:
demo.gif
实现思路:
1.创建的方块数要比展示的方块多一个。
2.将被点击的方块的Frame赋给它之后的方块
3.如果被点击的方块之后的方块之后,还有方块,那就把它之后的方块的Frame再赋给它之后的方块的之后的方块。🙂(这样描述晕不晕?)
4.知道最后一个之后在没有方块。
示例:

点击0号方块,1、2、3号方块会自动向前移位。
规律在与步骤2、3。

动画代码:
- (void)action:(UIButton *)button {
    button.hidden = YES;
    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        [self changeFrame:button];
        button.alpha = 0;
    } completion:^(BOOL finished) {
        button.frame = self.rightFrames.lastObject.CGRectValue;
        button.hidden = NO;
        [self reloadTagAndFrame:button];
        [UIView animateWithDuration:0.5 animations:^{
            button.alpha = 1;
        }];
    }];
}

动画效果使用的UIViewUIViewAnimationOptionTransitionCrossDissolve

核心在于Frame的改变,代码如下:

- (void)changeFrame:(UIButton *)button {
    [self frameChange:button tag:button.tag];
}
// 递归更改Frame
- (void)frameChange:(UIButton *)button tag:(NSInteger)tag {
    if (tag == 0) {
        tag++;
    }
    self.rightBtns[tag].frame = self.rightFrames[tag - 1].CGRectValue;
    if (tag < 3 && tag >= 1) {
        tag++;
        [self frameChange:self.rightBtns[tag] tag:tag];
    }
}
其他逻辑注意:

Demo地址

上一篇 下一篇

猜你喜欢

热点阅读