Я построил пользовательский индикатор выполнения в объекте UIView, используя 3 слоя:
- слой, который представляет «пустой» индикатор выполнения и который я использую в качестве фона.
- слой, который я использую для измерения прогресса, который появляется поверх слоя 1.
- слой, который просто рисует некоторые хэш-метки в верхней части индикатора выполнения.
Слой 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];
}