6 iphone core-animation opengl-es ios
我正在将CABasicAnimation应用于一个动画效果很好的图层的位置属性,但是在动画完成之后它会回到原始位置,如何避免这种情况并使图像仅保持在动画位置?
And*_*mer 15
有几种不同的方法可以解决这个问题.我最喜欢的是在动画结束时设置对象,并使用fromValue而不是toValue来创建动画.您还可以设置fromValue和toValue来创建此效果.即
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 1.0;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
viewToAnimate.center = endPoint;
[viewToAnimate.layer addAnimation:animation forKey:@"slide"];
Run Code Online (Sandbox Code Playgroud)
另一种方法是将自己设置为委托并实现:
-(void)animationDidStop:(id)sender finished:(BOOL)finished {
viewToAnimate.center = endPoint;
}
Run Code Online (Sandbox Code Playgroud)
你需要设置最终位置.如果您只使用动画fromValue和toValue,它将快速回到原始起点.动画在"播放"时使用视图/图层的副本,然后动画将在完成时显示原始视图/图层.
如果您没有明确设置它,它将显示为快照,即使视图/图层从未真正移动过.
startPoint和endPoint是CGPoints,myView是动画的UIView.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = .3;
animation.fromValue = [NSValue valueWithCGPoint:startPoint];
animation.toValue = [NSValue valueWithCGPoint:endPoint];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[myView.layer addAnimation:animation forKey:@"position"];
myView.layer.position = endPoint; // Must set end position, otherwise it jumps back
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16705 次 |
| 最近记录: |