我正在创建一个游戏,其中骰子动作以圆圈显示。当用户点击滚轮时,它会旋转并停在随机位置。 我搜索并找到了一些我试图实现的代码: -
[UIView beginAnimations:@"RotationAnimation" context:nil];
CALayer *myLayer = diceCircle.layer;
CABasicAnimation *fullRotationAnimation;
fullRotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotationAnimation .fromValue = [NSNumber numberWithFloat:0];
// fullRotationAnimation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
fullRotationAnimation.toValue = [NSNumber numberWithFloat:angle];
fullRotationAnimation.duration = 0.5; // speed for the rotation. Smaller number is faster
fullRotationAnimation.repeatCount = 1; // number of times to spin. 1 = once
[myLayer addAnimation:fullRotationAnimation forKey:@"360"];
[UIView commitAnimations];
角度来自: -
-(IBAction)diceButtonClicked:(id)sender
{
float angle=arc4random()%360;
NSLog(@"%f",angle);
float rad=radians(angle);
NSLog(@"%f",rad);
[self rotateDiceMethod:rad];
}
但是车轮每次都停在相同的位置,并且并不总是有活力。请给我一些实现所需功能的方法或示例代码。
提前致谢!
答案 0 :(得分:0)
这是我执行相同任务的旧代码:
CGFloat randValue= arc4random() % 10;
self.angleRotate = (randValue+30);
CABasicAnimation *spinAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
spinAnimation.fromValue = [NSNumber numberWithFloat:self.angle];
spinAnimation.toValue = [NSNumber numberWithFloat:self.angle+self.angleRotate];
spinAnimation.duration = 2.0f;
spinAnimation.cumulative = YES;
spinAnimation.additive = YES;
spinAnimation.removedOnCompletion = NO;
spinAnimation.delegate = self;
spinAnimation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseOut];
spinAnimation.fillMode = kCAFillModeForwards;
[self.arrow.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
当旋转停止时
- (void)animationDidStop:(CAAnimation *)spinAnimation finished:(BOOL)flag{
self.angle += self.angleRotate;
while (self.angle >= M_PI*2.0) {
self.angle -= M_PI*2.0;
}
NSLog(@"angleRotate value is: %f", self.angleRotate);
NSLog(@"angle value is: %f", self.angle);
self.angleRotate = 0;
}