我正在制作一个速度计应用程序,我希望箭头表现正确 - 如果我在一秒钟内从0到200公里发射,我希望它绕过条形图,但是如果我将旋转角度设置得足够大,那么短道,从底部.
如何让它几乎完整的圆圈而不是通过短路径?
这是我用于轮换的(普通)代码:
[UIView animateWithDuration:0.3 animations:^(){
self.arrow.transform = CGAffineTransformRotate(CGAffineTransformIdentity, -4.4);
}];
Run Code Online (Sandbox Code Playgroud)
我想我可以用小块旋转它,但有时可能需要将它从零快速旋转到最大值(例如,如果我们没有读取速度并且已经高速运行它,所以我们需要旋转箭头的大部分屏幕).
作为一个附带问题 - 如何对动画进行排队,以便我可以逐个应用它们?
不久前我也遇到过类似的问题。我只需要旋转 180 度,但有时需要顺时针,有时需要逆时针,但我总是在两者之间来回翻转,因此代码中出现了“旋转”属性。
您需要使用 CALayer 和 CAKeyframeAnimations,这是对我有用的代码:
-(void) showHideSpinnerWithDuration:(float) duration;
{
CALayer* layer = _spinner.layer;
CAKeyframeAnimation* animation;
animation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.duration = duration;
animation.cumulative = YES;
animation.repeatCount = 1;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
if (_rotated) {
animation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:DegreesToRadians(180)],
[NSNumber numberWithFloat:DegreesToRadians(0)],
nil];
self.rotated = NO;
} else {
animation.values = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:DegreesToRadians(0)],
[NSNumber numberWithFloat:DegreesToRadians(180)],
nil];
self.rotated = YES;
}
animation.keyTimes = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:duration], nil];
animation.timingFunctions = [NSArray arrayWithObjects:
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut],
[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut], nil];
[layer addAnimation:animation forKey:@"transform.rotation.z"];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1903 次 |
| 最近记录: |