我正在尝试在我的应用下载信息时动画箭头旋转。每旋转一半后,我希望应用程序检查数据是否已经下载。如果没有,箭头应该再次旋转一半,每次旋转之间会有短暂停顿。
-(void)animation {
[UIView animateWithDuration:0.7 delay:0 options:0 animations: ^{
imageView.transform = CGAffineTransformMakeRotation(180 * M_PI / 180);
} completion: ^(BOOL completed) {
if (completed && stillReloading) {
[self performSelector:@selector(animation) withObject:nil afterDelay:0.2];
}
}];
}
即使连续调用动画功能,图像也只旋转一次。在第一个动画之后对动画功能进行的所有调用都将被忽略。为什么会这样?我不想在动画上设置重复选项,因为我不知道箭头会旋转多少次,而且我想在每次旋转之间有一个短暂的停顿。
答案 0 :(得分:2)
这一行
imageView.transform = CGAffineTransformMakeRotation(180 * M_PI / 180);
将角度设置为180度,就是这样。下次使用它被称为相同角度时,所以你看不到动画。
答案 1 :(得分:1)
因为你已经让你观看角度的动画(180 * M_PI / 180),所以如果你设置相同的角度,它将永远不会再次弹出。
试试这个
CGFloat t = 180*M_PI / 180.0;
CGAffineTransform translateSpring = CGAffineTransformRotate(CGAffineTransformIdentity, t);
[UIView animateWithDuration:0.7 delay:0.0 options:nil animations:^{
imageView.transform = translateSpring;
} completion:^(BOOL completed) {
if (completed && stillReloading) {
//Use this method to let it spring back to its original angle
[UIView animateWithDuration:0.07 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
imageView.transform = CGAffineTransformIdentity;
} completion:NULL];
[self performSelector:@selector(animation) withObject:nil afterDelay:0.2];
}
}];
或者您还可以为imageView设置动态更新角度以进行转换。看看它是否有帮助:)
根据您的问题,您可以看到我的代码,在这里我使用动画将视图更改回其标识转换:
if (completed && stillReloading) {
//Use this method to let it spring back to its original angle
[UIView animateWithDuration:0.07 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
imageView.transform = CGAffineTransformIdentity;
} completion:NULL];
[self performSelector:@selector(animation) withObject:nil afterDelay:0.2];
}
// So if you want to transform it without getting seen, you can simply detele the animation code
if (completed && stillReloading) {
imageView.transform = CGAffineTransformIdentity;
[self performSelector:@selector(animation) withObject:nil afterDelay:0.2];
}
答案 2 :(得分:1)
如果要从当前位置再次旋转,则需要使用其他方法。 CGAffineTransformMakeRotation
通过身份转换进行轮换。所以你最终得到的结果是:旋转180度,旋转180度,旋转180度,物体不会移动。相反,您需要使用将偏移应用于当前转换的方法。这就是以下方法:
CGAffineTransformRotate(CGAffineTransform, CGFloat)
但是,不应像Saohooou的回答那样将其应用于CGAffineTransformIdentity
,而应将其应用于您视图的当前转换。
答案 3 :(得分:0)
你会发现很难让箭头以180度的增量顺时针连续旋转。以90度的增量旋转它会更简单。
您需要将新旋转应用于箭头的现有变换,以便每次都添加更多旋转。
-(void)animateArrowRotation {
[UIView animateWithDuration:0.35 delay:0 options:0 animations: ^{
imageView.transform = CGAffineTransformRotate(imageView.transform, M_PI_2);
} completion: ^(BOOL completed) {
if (completed && stillReloading) {
[self animateArrowRotation];
}
}];
}