2013-05-08 3 views
0

Я хочу нарисовать дугу, как на следующем рисунке, используя сердечник.Как нарисовать дугу с использованием сердечника draw

enter image description here

Не точно так же, но у меня есть фон набор изображений. Мне нужно рисовать дугу на основе загрузки файла. Теперь процент загружаемого номера у меня есть. Как я могу сделать это с использованием основной ничьей?

+0

<вставить шутку об использовании дуги для дуги> – Fonix

+1

посмотрите на эту статью http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths – tkanzakic

ответ

1

Изображение выше - это всего лишь два круга - один разрезает отверстие в другом. Это не близко к тому, что вы хотите выполнить.

Вам необходимо использовать CGContextAddArc.

ли что-то вроде этого:

  • открыть путь
  • двигаться к точке
  • начать рисовать дуги с CGContextAddArc
  • двигаться (и проведите линию) внутрь в дуговом Центр желаемая ширина среза
  • нарисовать обратную дугу
  • закрыть путь
0

Использование Mid точка Алгоритм Если вы хотите нарисовать круги, чтобы концентрические окружности обеспечивают разницу в радиусе ваших кругов

0

У меня есть то, что вы хотите:

// CircularProgress.h 

#import <UIKit/UIKit.h> 

@interface CircularProgress : UIView 

@property (nonatomic, assign) CGFloat percent; 

@end 

// CircularProgress.m 

#import "CircularProgress.h" 

@implementation CircularProgress 

- (void)setPercent:(CGFloat)percent 
{ 
    _percent = percent; 
    [self setNeedsDisplay]; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    [super drawRect:rect]; 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGRect bounds = [self bounds]; 
    CGPoint center = CGPointMake(bounds.size.width/2.0, bounds.size.height/2.0); 

    CGFloat lineWidth = 8.0; 
    CGFloat innerRadius = (bounds.size.width/2.0) - lineWidth; 
    CGFloat outerRadius = innerRadius + lineWidth; 
    CGFloat startAngle = -((float)M_PI/2.0); 
    CGFloat endAngle = ((self.percent/100.0) * 2 * (float)M_PI) + startAngle; 

    UIBezierPath *processBackgroundPath = [UIBezierPath bezierPath]; 
    processBackgroundPath.lineWidth = lineWidth; 
    CGFloat radius = (self.bounds.size.width - lineWidth)/2.0; 
    CGFloat fullAngle = (2.0 * (float)M_PI) + startAngle; 
    [processBackgroundPath addArcWithCenter:center radius:radius startAngle:startAngle endAngle:fullAngle clockwise:YES]; 
    [[UIColor whiteColor] set]; 
    [processBackgroundPath stroke]; 

    CGMutablePathRef progressPath = CGPathCreateMutable(); 
    CGPathMoveToPoint(progressPath, NULL, center.x, center.y - innerRadius); 
    CGPathAddArc(progressPath, NULL, center.x, center.y, innerRadius, startAngle, endAngle, YES); 
    CGPathAddArc(progressPath, NULL, center.x, center.y, outerRadius, endAngle, startAngle, NO); 
    CGPathCloseSubpath(progressPath); 

    UIColor *aColor = [UIColor colorWithRed:0.941 green:0.776 blue:0.216 alpha:1.0]; 
    [aColor setFill]; 
    CGContextAddPath(context, progressPath); 
    CGContextFillPath(context); 

    CGPathRelease(progressPath); 
} 

@end 

Вам просто нужно создать объект CircularProgress класс желаемого размера (он должен быть квадратным) и добавить его как подпункт к вашему основному виду. Затем просто измените значение percent и получите результат. Цвет и ширина жестко закодированы, потому что это не законченный контроль, но вы должны поймать идею.

Смежные вопросы