Имам подкласове UIView
който се състои от няколко слоя (най-вече CAShapeLayers
с няколко CATextLayers
). Проблемът ми е, че ако оживея преоразмеряването на UIView
използвайки анимационен блок (beginAnimations
, commitAnimations
) и препредаване на подслоевете в отменено layoutSubviews
, тогава слоевете не се анимират с UIView
.
По - долу е моят код, за да анимирате рамката на UIView
:
miniView.backgroundColor = [UIColor orangeColor];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatCount:MAXFLOAT];
[UIView setAnimationRepeatAutoreverses:YES];
miniView.frame = newFrame;
[UIView commitAnimations];
Така че проблемът е, че виждането е правилноно подложките не са. Виждам, че гледката се увеличава и свива, но подлепите растат незабавно и след това остават с по-големия размер. Какъв е най-добрият начин за преоразмеряване на подслоевете на изглед при преоразмеряване на изгледа? И как да направя тези анимирани по същия начин с изгледа на родителите?
Отговори:
1 за отговор № 1Ще трябва да видя повече код, за да реша проблема, но можете да опитате да анимирате слоя миниView вместо неговия изглед.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.fromValue = [NSNumber numberWithFloat:0.0];
animation.toValue = [NSNumber numberWithFloat:1.0];
// additional setup...
[miniView.layer layoutIfNeeded];
[miniView.layer addAnimation:animation forKey:@"whateverYouWant"];
Вместо да използвате UIKit анимация, това би трябвало да е по-гъвкаво, щом се окажете с него.