Я пытаюсь применить анимацию вращения по количеству градусов до UIImageView
и сохранить преобразование вращения в блоке завершения.CABasicAnimation мерцание при применении завершения
Проблема, с которой я столкнулась, заключается в том, что при выполнении блока завершения происходит видимое мерцание, генерируемое путем перехода от конечного состояния анимации к блоку завершения.
Вот код, который я в настоящее время с помощью:
if (futureAngle == currentAngle) {
return;
}
float rotationAngle;
if (futureAngle < currentAngle) {
rotationAngle = futureAngle - currentAngle;
}else{
rotationAngle = futureAngle - currentAngle;
}
float animationDuration = fabs(rotationAngle)/100;
rotationAngle = GLKMathDegreesToRadians(rotationAngle);
[CATransaction begin];
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.byValue = [NSNumber numberWithFloat:rotationAngle];
rotationAnimation.duration = animationDuration;
rotationAnimation.removedOnCompletion = YES;
[CATransaction setCompletionBlock:^{
view.transform = CGAffineTransformRotate(view.transform, rotationAngle);
}];
[view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
[CATransaction commit];
Когда вы говорите, мерцать, я полагаю, вы имеете в виду, что в конце анимации, что это мгновенно возвращается в исходное состояние, прежде чем вернуться в конечное состояние? Это можно решить либо путем (a) установки окончательного 'view.transform'_before_, который вы запускаете анимацию (и вам больше не нужен' completeBlock'); или (b), установив «fillMode» анимации в 'kCAFillModeForwards' и установите' removedOnCompletion' в 'false'. – Rob
См. Http://oleb.net/blog/2012/11/prevent-caanimation-snap-back/ или http://stackoverflow.com/a/31010421/1271826 или http://stackoverflow.com/a/7690841/1271826 – Rob
@Rob вы можете привести пример предложения относительно блока завершения? Я попробовал fillMode для kCAFillModeForwards и установил removeOnCompletion в false до создания сообщения, и они не сработали для меня. –