У меня есть простое круговое представление прогресса, которое заполняется, когда файл загружается.Большую часть времени он работает как задумано, но иногда он «сбрасывается» - он заполняется до определенной части, обычно до последней части до 100%, а затем внезапно достигает 0%, а затем до 100%.Вот его реализация:
@interface CircleView()
@property (nonatomic, strong) CAShapeLayer *circleLayer;
@end
@implementation CircleView
-(instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = UIColor.clearColor;
UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width / 2., self.frame.size.height / 2.0) radius: (self.frame.size.width - 10) / 2 startAngle:0.0 endAngle:M_PI * 2 clockwise:YES];
CAShapeLayer *downLayer = [[CAShapeLayer alloc] init];
downLayer.path = circlePath.CGPath;
downLayer.fillColor = UIColor.clearColor.CGColor;
downLayer.strokeColor = UIColor.lightGrayColor.CGColor;
downLayer.lineWidth = 15.0;
downLayer.strokeEnd = 1.0;
self.circleLayer = [[CAShapeLayer alloc] init];
self.circleLayer.path = circlePath.CGPath;
self.circleLayer.fillColor = UIColor.clearColor.CGColor;
self.circleLayer.strokeColor = UIColor.tubeWayRed.CGColor;
self.circleLayer.lineWidth = 15.0;
self.circleLayer.strokeEnd = 0.0;
[self.layer addSublayer:downLayer];
[self.layer addSublayer: self.circleLayer];
}
return self;
}
-(void)animateCircleToPart:(CGFloat)toPart {
self.circleLayer.strokeEnd = toPart;
}
-(void)resetCircle {
NSLog(@"Resetting circle");
[CATransaction begin];
[CATransaction setDisableActions:YES];
self.circleLayer.strokeEnd = 0;
[CATransaction commit];
}
@end
Журналы показывают, что он не сбрасывается методом reset
до достижения 100%.Есть идеи, что может быть не так?Спасибо.
Исчезла проблема, связанная с вызовом self.circleLayer.strokeEnd = toPart;
в [CATransaction begin]
- [CATransaction commit]
, например:
-(void)animateCircleToPart: (CGFloat)toPart {
[CATransaction begin];
self.circleLayer.strokeEnd = toPart;
[CATransaction commit];
}
Может кто-нибудь объяснить, почему?