Ich habe zwei Dreh Animationen in meinem CAAnimationGroup
, eine, die von Null und einer anderen beginnt, die von diesem Zustand wiederholt und autoreverses:Was ist der maximale Wert für die Dauer (CFTimeInterval) für eine CAAnimationGroup?
- (void)addWobbleAnimationToView:(UIView *)view amount:(float)amount speed:(float)speed
{
NSMutableArray *anims = [NSMutableArray array];
// initial wobble
CABasicAnimation *startWobble = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
startWobble.toValue = [NSNumber numberWithFloat:-amount];
startWobble.duration = speed/2.0;
startWobble.beginTime = 0;
startWobble.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[anims addObject:startWobble];
// rest of wobble
CABasicAnimation *wobbleAnim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
wobbleAnim.fromValue = [NSNumber numberWithFloat:-amount];
wobbleAnim.toValue = [NSNumber numberWithFloat:amount];
wobbleAnim.duration = speed;
wobbleAnim.beginTime = speed/2.0;
wobbleAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
wobbleAnim.autoreverses = YES;
wobbleAnim.repeatCount = INFINITY;
[anims addObject:wobbleAnim];
CAAnimationGroup *wobbleGroup = [CAAnimationGroup animation];
wobbleGroup.duration = DBL_MAX; // this stops it from working
wobbleGroup.animations = anims;
[view.layer addAnimation:wobbleGroup forKey:@"wobble"];
}
Da CFTimeInterval als Doppel definiert ist, versuche ich, die Dauer der Animationsgruppe einstellen zu DBL_MAX
, aber das stoppt die Animationsgruppe zu laufen. Wenn ich es jedoch auf eine große Zahl wie 10000 setze, läuft es gut. Was ist die größte Zahl, die ich für eine Dauer von einem CAAnimationGroup
verwenden kann, es bis ins Unendliche wie möglich für so nahe läuft zu gewährleisten?
UPDATE: Es scheint, dass, wenn ich einen sehr großen Wert wie DBL_MAX/4.0
eingeben, dann friert es für eine Sekunde ein, dann beginnt die Animation. Wenn ich den Wert DBL_MAX/20.0
einstelle, ist das Einfrieren am Anfang viel kleiner. Es scheint, dass ein so großer Wert für die Dauer dazu führt, dass es einfriert. Gibt es einen besseren Weg, dies zu tun, als einen sehr großen Wert für die Dauer zu verwenden?
Sie versuchen, diese Gruppe von Animationen für immer zu wiederholen? –
ja, aber ich möchte nur den zweiten Teil der Gruppe für immer wiederholen. – jowie
Sind Sie sicher, dass Sie die Dauer überhaupt einstellen müssen? Was passiert, wenn du es nicht siehst? –