2015-06-17 3 views
0

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

NSLog (_pathLayer) print 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]]; 
} 

ответ

3

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