dia*_*ana 1 iphone core-animation
我正在尝试实现轮式功能.我计算视图的中心点,并找到在touchesMoved:方法中移动时创建的角度.对于第一步,它旋转了一定程度.但是对于下一步移动它会回到视图的原始位置然后旋转.实际上我希望从前一轮的终点开始旋转.什么事都缺了?有任何帮助
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
float a, b,c;
UITouch *aTouch = [touches anyObject];
if ([aTouch view] == dialView) {
CGPoint loc = [aTouch locationInView:dialView];
CGPoint prevloc = [aTouch previousLocationInView:dialView];
c = [self GetSides:prevloc point2:loc];
a = [self GetSides:loc point2:cntrePoint];
b = [self GetSides:prevloc point2:cntrePoint];
float angle = acos((a*a+b*b-c*c)/(2*a*b));// Calculating angle created on moving
CABasicAnimation *rotate ;
rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotate.fromValue = [NSNumber numberWithFloat:0];
rotate.toValue = [NSNumber numberWithFloat:((angle*M_PI)/180)];
rotate.autoreverses = NO;
rotate.fillMode = kCAFillModeForwards;
rotate.duration = 1;
rotate.repeatCount = 1;
rotate.removedOnCompletion = NO;
rotate.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[dialView.layer addAnimation:rotate forKey:@"360"];
}
}
Run Code Online (Sandbox Code Playgroud)
您正在执行的动画(看起来是从此答案中绘制的)同时指定了to和from值,因此每次都会从0旋转到角度弧度.这意味着您的图像将在每个动画上跳回到开头.
通常,如果要删除fromValue行,则动画应从当前角度转到新角度,但看起来转换属性的行为略有不同.您需要将fromValue设置为从图层的presentationLayer中提取的旋转变换的当前值.以下代码应从当前角度旋转到目标角度:
CABasicAnimation *rotate;
rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotate.fromValue = [[dialView.layer presentationLayer] valueForKeyPath:@"transform.rotation.z"];
rotate.toValue = [NSNumber numberWithFloat:angle];
rotate.fillMode = kCAFillModeForwards;
rotate.duration = 1;
rotate.removedOnCompletion = NO;
rotate.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
Run Code Online (Sandbox Code Playgroud)
请注意,我已经删除了toValue中的度数到弧度的转换,因为你的acos()计算以弧度为单位返回值.
编辑(10/23/2009):纠正了我之前关于fromValue与transform属性的功能的假设.
| 归档时间: |
|
| 查看次数: |
3423 次 |
| 最近记录: |