CABasicAnimation увеличивает ширину со статической левой исходной точкой - PullRequest
3 голосов
/ 02 октября 2011

Я пытаюсь сделать простую анимацию, используя Core Animation, чтобы нарисовать простую полосу, которая растет. Как индикатор выполнения.

Итак, полоса начинается с x = 0 с шириной 0 и увеличивается по размеру рамки.

Но, когда я анимирую bounds.size.width, исходная точка считается центром слоя, и она растёт наружу в обоих направлениях x, тогда как я хочу, чтобы крайняя левая точка полосы всегда была 0 правее всего изменить анимацию - опять же, как индикатор выполнения.

Нужно ли анимировать дополнительное свойство или есть что-то, кроме bounds.size.width, которое я должен использовать для достижения этой цели?

Для справки, вот что у меня сейчас:

CABasicAnimation * animation;
animation = [CABasicAnimation animationWithKeyPath:@"bounds.size.width"];
animation.fromValue = [NSNumber numberWithInt:0];
animation.toValue = [NSNumber numberWithInt:(self.frame.size.width / 2)];
[animation setValue:@"primary_on" forKey:@"animation_key"];
animation.duration = duration;
[primaryMask addAnimation:animation forKey:@"primary_on"];

(основная маска - это CALayer)

То же самое происходит в этом сценарии:

animation = [CABasicAnimation animationWithKeyPath:@"bounds"];
CGRect oldBounds = CGRectMake(0, 0, 0, self.frame.size.height);
CGRect newBounds = CGRectMake(0, 0, self.frame.size.width / 2, self.frame.size.height);
animation.fromValue = [NSValue valueWithCGRect:oldBounds];
animation.toValue = [NSValue valueWithCGRect:newBounds];

1 Ответ

10 голосов
/ 02 октября 2011

Вам необходимо установить

layer.anchorPoint = CGPointZero;

По умолчанию это свойство {0,5, 0,5} является центром слоя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...