我有一个使用自定义动画在我的应用程序中创建的速度计小部件,但我无法让它以我想要的方式制作动画。
拾取器根据传入的值动画到特定点。范围为 0 - 50。因此,如果其为 50,则拾取器将一直向右旋转,它将保持在左侧. 但是,我希望在开始时让选择始终动画到右侧,然后回到正确的位置。这是我遇到问题的部分。
暂时我已经硬编码所有的值只是为了测试目的。
选择在开始时位于中心,所以我需要让它看起来向左旋转。
image.transform = CGAffineTransformRotate(image.transform, -0.8);
然后我需要把它动画到最右边所以我用这个
[UIView animateWithDuration:2.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
image.transform = CGAffineTransformRotate(image.transform, 1.7);
}
completion:nil];
这很好用,所以当应用程序启动时,选择将从左侧开始,然后一直向右旋转。
当我将最后一部分添加到
然后我需要它从右边旋转到它需要的位置。暂时我把它设置为中心。
[UIView animateWithDuration:2.0 delay:2.0 options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
image.transform = CGAffineTransformRotate(image.transform, -0.8);
}
completion:nil];
当应用程序启动时,选择从右侧开始,然后旋转到中心。它忽略了应该开始向左旋转的第一部分。
有谁知道为什么会这样?多年来一直在这,似乎无法弄清楚。
编辑:我尝试在此代码中粘贴最终动画
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
});
选择将从左到右进行动画处理,但随后它只是从右侧跳转到中心点,而不是动画到中心点:@
试过这个:
-(void) animateToEnd : (UIImageView *)image
{
[UIView animateWithDuration:2.0 delay:0 options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
image.transform = CGAffineTransformRotate(image.transform, 1.7);
image.transform = CGAffineTransformIdentity;
}
completion:nil];
}
-(void) animateToFinalPosition : (UIImageView *)image
{
[UIView animateWithDuration:2.0 delay:2.0 options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
image.transform = CGAffineTransformRotate(image.transform, -0.8);
image.transform = CGAffineTransformIdentity;
}
completion:nil];
}
-(void) speedometer : (UIImageView *)image
{
image.transform = CGAffineTransformRotate(image_p.transform, -0.8);
[self animateToEnd:image];
[self animateToFinalPosition:image];
}
它忽略了从左到右的动画,只是从最左边开始
固定问题。把动画改成了这个
-(void) animateToEnd : (UIImageView *)image_p
{
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
image_p.transform = CGAffineTransformRotate(image_p.transform, 1.7);
[UIView commitAnimations];
}
-(void) animateToPosition : (UIImageView *)image_p : (float)temp
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
NSLog(@"Dispatch");
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];
[UIView setAnimationDelay:0.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
image_p.transform = CGAffineTransformRotate(image_p.transform, -temp);
[UIView commitAnimations];
});
}
我之前使用的那个块代码似乎导致了这个问题