我有一個車速表窗口小部件,在我的應用程序中使用自定義動畫創建,我有問題將其設置爲我想要的動畫方式。xCode旋轉動畫車速表
根據傳入的值選擇動畫到一個特定的點。它的取值範圍是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];
});
}
我用之前該塊代碼似乎會導致
這個問題不是真的關於Xcode。 – 2012-09-24 13:56:32
我刪除了標籤 – AdamM
我會考慮爲此使用coreanimation,因爲它內置了對重複動畫的支持。 –