РЕДАКТИРОВАТЬ: Прикрепленный код для CAAnimationGroup
, анимация рисуется последовательно, но у меня все еще возникает проблема, что firstAnimation
исчезает после запуска secondAnimation
, и я заметил в документация для CAAnimationGroup
говорится:
Свойства removeOnCompletion анимаций в свойстве animations в настоящее время игнорируются.
Как это обойти?
Я пытаюсь анимировать несколько объектов CAKeyFrameAnimation
на одном слое, чтобы, когда firstAnimation
завершается, путь, который он рисует, оставался на экране, когда secondAnimation
запускался, поэтому конечным результатом является изображение, сделанное из путей обоих объектов вместе на экране. .
В настоящее время, если я помещу оба объекта анимации (по порядку) в один и тот же метод и вызову его, на экране будет отображаться только secondAnimation
. Если я разделю их и вызову последовательно, firstAnimation
будет отображаться на экране, а затем исчезнет, когда начнется secondAnimation
. Сами по себе анимации работают именно так, как задумано.
Я попытался найти CAAnimationGroup
примеров, потому что это кажется то, что я ищу, но из пары примеров, которые я видел, мне не совсем понятно, что происходит или как чтобы произвести эффект, который я ищу, может ли кто-нибудь показать мне, как последовательно рисовать обе анимации и сохранять результаты на экране?
Вот мой слой, две мои анимации и моя группа:
CAShapeLayer *pathLayer = [CAShapeLayer layer];
pathLayer.frame = self.animationLayer.bounds;
pathLayer.bounds = pathRect;
pathLayer.geometryFlipped = YES;
pathLayer.strokeColor = [[UIColor blackColor] CGColor];
pathLayer.fillColor = nil;
pathLayer.lineWidth = 10.0f;
pathLayer.lineJoin = kCALineJoinBevel;
CAKeyframeAnimation *firstAnimation = [CAKeyframeAnimation animationWithKeyPath:@"path"];
firstAnimation.beginTime = 0.0;
firstAnimation.duration = 4.0;
firstAnimation.removedOnCompletion = NO; //Is being ignored by CAAnimationGroup
firstAnimation.fillMode = kCAFillModeForwards;
firstAnimation.values = [NSArray arrayWithObjects:
(id)path0.CGPath,(id)path1.CGPath,
(id)path2.CGPath,(id)path3.CGPath,
(id)path4.CGPath,(id)path5.CGPath,nil];
firstAnimation.keyTimes = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.2],
[NSNumber numberWithFloat:0.21],
[NSNumber numberWithFloat:0.22],
[NSNumber numberWithFloat:0.63],
[NSNumber numberWithFloat:1.0], nil];
CAKeyframeAnimation *secondAnimation = [CAKeyframeAnimation animationWithKeyPath:@"path"];
secondAnimation.beginTime = 4.0; //This should come directly after firstAnimation
secondAnimation.duration = 3.0;
secondAnimation.removedOnCompletion = NO; //Is being ignored by CAAnimationGroup
secondAnimation.fillMode = kCAFillModeForwards;
secondAnimation.values = [NSArray arrayWithObjects:
(id)path00.CGPath,(id)path01.CGPath,
(id)path02.CGPath,nil];
secondAnimation.keyTimes = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.8],
[NSNumber numberWithFloat:1.0],nil];
CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = [NSArray arrayWithObjects:firstAnimation,secondAnimation,nil];
group.duration = 7.0; //The total time of the animations, don't know if redundant
group.delegate = self;
[self.pathLayer addAnimation:group forKey:@"path"];