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)
有两种观点.存在"正弦波"视图,并且存在正弦波视图的超视图(父视图).
假设superview是320点宽 - iPhone屏幕的宽度.
使正弦波视图为640点,并在其中绘制两个正弦波周期.每个周期正好是320点宽.因此,正弦波视图的左侧320点看起来与右侧320点完全相同.
现在将正弦波视图放在其超级视图中,其中-3 frame.x到-3.这意味着只能看到正弦波视图的正确320点:

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

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

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

效果UIViewAnimationOptionRepeat是将动画参数重置为其原始状态,然后开始动画.因此,如果按照我的描述排列正弦波视图及其超视图,您将获得无缝循环.
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |