CABasic Анимация слоя изменчива - PullRequest
1 голос
/ 26 января 2012

Я построил пользовательский индикатор выполнения в объекте UIView, используя 3 слоя:

  1. слой, который представляет «пустой» индикатор выполнения и который я использую в качестве фона.
  2. слой, который я использую для измерения прогресса, который появляется поверх слоя 1.
  3. слой, который просто рисует некоторые хэш-метки в верхней части индикатора выполнения.

Слой 2 анимирован для равномерного растягивания ширины границ от 0 до 320 в течение определенного периода времени, обычно около 2 минут.Он работает нормально, но не так гладко, как я ожидал.
Есть мысли о том, как можно улучшить производительность или использовать другие / дополнительные методы анимации, чтобы заставить его двигаться более равномерно?

Кодкоторый создает слой 2:

- (void)drawForegroundLayer {

CGColorRef startColor = [UIColor colorWithRed:230.0/255.0 green:230.0/255.0 blue:230.0/255.0 alpha:1.0].CGColor;
CGColorRef endColor = [UIColor colorWithRed:239.0/255.0 green:125.0/255.0 blue:0.0 alpha:1.0].CGColor;

CAGradientLayer *foregroundLayer = [CAGradientLayer layer];
foregroundLayer.frame = CGRectMake(0, 2, 0, 13);
foregroundLayer.anchorPoint = CGPointMake(0.0,0.5);
foregroundLayer.colors = [NSArray arrayWithObjects:(id)startColor, (id)endColor, nil];
foregroundLayer.borderWidth = 0;
foregroundLayer.edgeAntialiasingMask = kCALayerRightEdge;

[self.layer addSublayer:foregroundLayer];
}

А код, который оживляет слой 2:

- (void)start {

CALayer *bar = [[self.layer sublayers] objectAtIndex:1];

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds.size.width"];
animation.toValue = [NSNumber numberWithFloat:320.0];
animation.duration = MAXIMUM_TIME_PER_SESSION;

[bar addAnimation:animation forKey:nil];

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