#iphone #ios #animation #core-animation #careplicatorlayer
#iPhone #iOS #Анимация #ядро -анимация #карепликаторлаер #ядро-анимация #careplicatorlayer
Вопрос:
Я пытался создать классный текстовый эффект с помощью CAReplicatorLayer, CATextLayer и очень простых анимаций. Я пытаюсь сделать так, чтобы буквы выглядели так, как будто они выпадают из верхней части экрана, за которыми следуют крутые репликаторы, которые будут становиться все менее и менее заметными. Мне удалось добиться этого эффекта, но не полностью.
Пока это то, что у меня есть:
CATextLayer *messageLayer = [CATextLayer layer];
[messageLayer setForegroundColor:[[UIColor blackColor] CGColor]];
[messageLayer setContentsScale:[[UIScreen mainScreen] scale]];
[messageLayer setFrame:CGRectMake(0, 0, 40, 40)];
[messageLayer setString:@"A"];
CAReplicatorLayer *replicatorX = [CAReplicatorLayer layer];
//Set the replicator's attributes
replicatorX.frame = CGRectMake(0, 0, 40, 40);
replicatorX.anchorPoint = CGPointMake(0,0);
replicatorX.position = CGPointMake(0, 0);
replicatorX.instanceCount = 9;
replicatorX.instanceDelay = 0.15;
replicatorX.instanceAlphaOffset = -0.1;
replicatorX.zPosition = 200;
replicatorX.anchorPointZ = -160;
[replicatorX addSublayer:messageLayer];
[self.view.layer addSublayer:replicatorX];
messageLayer.position = CGPointMake(40, 400);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
animation.fromValue = [NSNumber numberWithInt:0];;
animation.toValue = [NSNumber numberWithInt:400];
animation.duration = 3;
[messageLayer addAnimation:animation forKey:@"s"];
У меня две проблемы:
- Реплицируемые слои начинаются с конечной точки.
- Когда основной слой достигает своей последней анимированной точки, анимация останавливается, и реплицированные слои не могут завершить свою анимацию.
Комментарии:
1. как для каждого слоя CAReplicatorLayer размер кадра отличается от размера objective c
Ответ №1:
Мы надеемся, что установка правильных значений для свойств fillMode и removedOnCompletion объекта анимации решит ваши проблемы:
«Реплицируемые слои начинаются с конечной точки».
Это вызвано значением, присвоенным instanceDelay
свойству, которое задерживает анимацию на 0,15 секунды в вашем примере. Чтобы представить анимацию из значения fromValue, вам необходимо учесть эту задержку, установив для режима заполнения анимации значение kCAFillModeBackwards .
animation.fillMode = kCAFillModeBackwards;
«Когда основной слой достигает своей последней анимированной точки, анимация останавливается
, и реплицированные слои не могут завершить свою анимацию».
Это происходит потому, что по умолчанию «анимация удаляется из анимации целевого слоя по завершении».1. Вы можете переопределить это поведение по умолчанию, установив для атрибута анимации removedOnCompletion значение NO.
animation.removedOnCompletion = NO;
Надеюсь, это поможет. 🙂