2013-12-18 9 views
0

Я пытаюсь создать кривую Безье вручную следующим образом:Рисование кривой Безье вручную

- (void)drawBezierFrom:(CGPoint)from to:(CGPoint)to controlA:(CGPoint)a controlB:(CGPoint)b sections:(NSUInteger)cnt color:(NSUInteger)color 
{ 
float qx, qy; 
float q1, q2, q3, q4; 
int lastx = - 1, lasty; 
int plotx, ploty; 
float t = 0.0; 

while (t <= 1) 
{ 
    q1 = t*t*t*-1 + t*t*3 + t*-3 + 1; 
    q2 = t*t*t*3 + t*t*-6 + t*3; 
    q3 = t*t*t*-3 + t*t*3; 
    q4 = t*t*t; 

    qx = q1*from.x + q2*a.x + q3*to.x + q4*b.x; 
    qy = q1*from.y + q2*a.y + q3*to.y + q4*b.y; 

    plotx = round(qx); 
    ploty = round(qy); 

    /*if (lastx != -1) 
     [self drawLineFrom:NSMakePoint(lastx, lasty) to:NSMakePoint(plotx, ploty) color:color]; 
    else 
     [self drawLineFrom:NSMakePoint(from.x, from.y) to:NSMakePoint(plotx, ploty) color:color];*/ 

    lastx = plotx; 
    lasty = ploty; 
    t = t + (1.0/(cnt + 0.0f)); 
} 
//[self drawLineFrom:NSMakePoint(lastx, lasty) to:NSMakePoint(to.x, to.y) color:color]; 
[self drawLineFromCoordX:lastx andY:lasty toPointWithCoordsX:to.x andY:to.y]; 
} 

-(void)drawLineFromCoordX:(int)x andY:(int)y toPointWithCoordsX: (int)fx andY: (int)fy{ 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextMoveToPoint(context, x,y); 
CGContextAddLineToPoint(context, fx,fy); 
CGContextStrokePath(context); 
} 

Вызов методов в viewDidLoad:

CGPoint fromPoint = CGPointMake(10, 10); 
CGPoint toPoint = CGPointMake(100, 10); 
CGPoint controlA = CGPointMake(50, 50); 
CGPoint controlB = CGPointMake(60, 60); 

[self drawBezierFrom:fromPoint to:toPoint controlA:controlA controlB:controlB sections:10  color:4]; 

EDIT:

Я сделал точно что вы сделали:

-(void)drawRect:(CGRect)rect{ 
CGPoint fromPoint = CGPointMake(10, 10); 
CGPoint toPoint = CGPointMake(100, 10); 
CGPoint controlA = CGPointMake(50, 50); 
CGPoint controlB = CGPointMake(60, 60); 

[self drawBezierFrom:fromPoint to:toPoint controlA:controlA controlB:controlB sections:10 color:4]; 
} 

и сохранил все остальное одинаково, и он все еще не работает.

+5

Вы вызываете код чертежа внутри допустимого контекста графики, * справа *? простой графический код Core Graphics внутри viewDidLoad ничего не сделает, поскольку там нет графического контекста. –

+0

Код, который вы видите, есть все, что есть – Alessandro

+0

не работает даже в - (void) viewDidAppear: (BOOL) анимированный – Alessandro

ответ

1

Поместите код, который у вас есть, в ViewDidLoad (кроме [super viewDidLoad]) в метод drawRect. UIGraphicsGetCurrentContext() необходимо вызвать в методе drawRect, чтобы узнать, что whitch - текущий контекст.

РЕДАКТИРОВАТЬ:

также положить:

[self drawLineFromCoordX:lastx andY:lasty toPointWithCoordsX:to.x andY:to.y]; 

внутри во время цикла. И до того, как петля установит цвет хода:

[[UIColor redColor] setStroke]; 
+0

см. в редакции – Alessandro

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