неправильный setStrokeEnd CAShapeLayer

Я пытаюсь создать простой круговой прогресс, прогресс работает, но с неправильным значением, круг завершается на 0,8 вместо 1, полукруг завершается на 0,4, я не нахожу ошибку:

NSLog(_pathLayer) печатает 0.1,0.2,...1.0, так что все в порядке.

- (void)drawRect:(CGRect)rect {

    /* Cerchio rosso centrale */
    UIBezierPath *circlePath = [UIBezierPath bezierPath];
    [circlePath addArcWithCenter:CGPointMake(self.frame.size.width/2,self.frame.size.height/2)
                          radius:60
                      startAngle:degreesToRadians(-90)
                        endAngle:degreesToRadians(360)
                       clockwise:YES];

    [self.layer addSublayer:[self disegnaLinea:circlePath
                                        andWidth:_strokeWidth
                                        andColor:_color
                                           toEnd:0]];
}


- (void)setProgress:(double)progress {

    if (progress != _progress)
    {
        _progress = progress;
        [self updateAnimations];


        NSLog(@"_pathLayer: %f",_pathLayer.strokeEnd);
    }


}

- (CAShapeLayer *) disegnaLinea:(UIBezierPath *)path andWidth:(float)width andColor:(UIColor *)color toEnd:(int)end {

    _pathLayer = [CAShapeLayer layer];
    _pathLayer.frame = self.bounds;
    _pathLayer.path = path.CGPath;
    _pathLayer.strokeColor = [color CGColor];
    _pathLayer.fillColor = nil;
    _pathLayer.lineWidth = width;
    [_pathLayer setStrokeStart:0];
    [_pathLayer setStrokeEnd:end];

    return _pathLayer;
}

- (void) updateAnimations {

    [_pathLayer setStrokeEnd:_progress];
    [_pathLayer didChangeValueForKey:@"endValue"];

    [_progressLabel setText:[NSString stringWithFormat:@"%f",_progress]];
}

person francesco.venica    schedule 17.06.2015    source источник


Ответы (1)


Если вы сделаете (endAngle - startAngle), вы получите 450 градусов, что в основном означает, что ваш путь длиннее одного полного круга. Мое предположение состояло бы в том, чтобы использовать 270 для endAngle. Ваше здоровье.

person Uros    schedule 24.08.2015