Подтвердить что ты не робот

CALayer анимации с изменением рамки?

У меня есть CALayer, который я добавил в мой взгляд:

myView.myCALayer = [[CALayer alloc] init];
CGSize size = myView.frame.size;
myView.myCALayer.frame = CGRectMake(0, 0, size.width, size.height);
myView.myCALayer.backgroundColor = [[UIColor blackColor] CGColor];
[myView.layer addSublayer:myView.myCALayer];

Когда я пытаюсь изменить кадр CALayer после изменения рамки myView, изменяется размер CALayer. Я добавил анимацию в CALayer, поэтому я не понимаю этого. Я даже попытался вызвать removeAllAnimations на уровне слоя до изменения размера и все еще оживляет изменение размера.

Кто-нибудь знает, что может здесь происходить?

4b9b3361

Ответ 1

Фактически существует неявная анимация при установке некоторых значений для CALayer. Вы должны отключить анимацию перед установкой нового фрейма.

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

[myView.myCALayer.frame = (CGRect){ { 10, 10 }, { 100, 100 } ];

[CATransaction commit];

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AdvancedAnimationTricks/AdvancedAnimationTricks.html#//apple_ref/doc/uid/TP40004514-CH8-SW3