绘制无限正弦波

Bro*_*sef 0 cocoa-touch ios ios7

我正在尝试制作类似于此解决方案的动画正弦波:https: //stackoverflow.com/a/17535290

我试图使我的正弦波连续,以便我不断地绘制相同的正弦波.在上面的解决方案中,一旦波的起始点等于帧的宽度,视图就会重新开始绘制新波.

有人可以解释CGAffineTransformMakeTranslation(+_self_view.frame.size.width/2, 0);下面代码中的内容吗?我的理解是它返回一个矩阵,将x轴向右移动一半的帧大小.我不明白这是如何导致动画做它做的.

-(void)animateWave {
    [UIView animateWithDuration:.5 delay:0.0 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionCurveLinear animations:^{
    _self_view.transform = CGAffineTransformMakeTranslation(+_self_view.frame.size.width/2, 0);
    } completion:^(BOOL finished) {
    _self_view.transform = CGAffineTransformMakeTranslation(0, 0);
    }];
}
Run Code Online (Sandbox Code Playgroud)

rob*_*off 8

有两种观点.存在"正弦波"视图,并且存在正弦波视图的超视图(父视图).

假设superview是320点宽 - iPhone屏幕的宽度.

使正弦波视图为640点,并在其中绘制两个正弦波周期.每个周期正好是320点宽.因此,正弦波视图的左侧320点看起来与右侧320点完全相同.

现在将正弦波视图放在其超级视图中,其中-3 frame.x到-3.这意味着只能看到正弦波视图的正确320点:

初步安排

现在将正弦波视图向右移动320点(宽度的一半):

动画

动画结束时,正弦波视图的可见部分看起来与动画前可见的部分相同:

完成

如果此时您将正弦波视图重置为其初始位置(即时,没有动画),则用户将无法分辨,因为可见像素不会改变:

重启

效果UIViewAnimationOptionRepeat是将动画参数重置为其原始状态,然后开始动画.因此,如果按照我的描述排列正弦波视图及其超视图,您将获得无缝循环.