Я пытаюсь разобраться с рисованием (довольно простых) фигур в Какао. Я понимаю, как создавать пути с прямыми краями (да!), Но когда дело доходит до кривых, я просто не могу понять, какие входы будут давать кривую какой формы. В частности, я понятия не имею, как аргументы метода controlPoint1:
и controlPoint2:
влияют на форму.
Я пытаюсь приблизить форму вкладки в Google Chrome :
И код, который я использую, такой:
-(void)drawRect:(NSRect)dirtyRect {
NSSize size = [self bounds].size;
CGFloat height = size.height;
CGFloat width = size.width;
NSBezierPath *path = [NSBezierPath bezierPath];
[path setLineWidth:1];
[path moveToPoint:NSMakePoint(0, 0)];
[path curveToPoint:NSMakePoint(width * 0.1, height)
controlPoint1:NSMakePoint(width * 0.05, height)
controlPoint2:NSMakePoint(width * 0.03, height * 0.05)];
[path lineToPoint:NSMakePoint(width * 0.9, height)];
[path curveToPoint:NSMakePoint(width, 0)
controlPoint1:NSMakePoint(width * 0.95, height)
controlPoint2:NSMakePoint(width * 0.97, height * 0.05)];
[path closePath];
[[NSColor colorWithCalibratedWhite:0.98 alpha:1] set];
[path fill];
[[NSColor colorWithCalibratedWhite:0.6 alpha:1] set];
[path stroke];
}
Я ужасно терплю неудачу.
Видите, вот почему у нас не может быть хороших вещей: (
Кто-нибудь может мне подсказать, как подумать, когда дело доходит до рисования кривых? Пример, который рисует этот путь, тоже был бы отличным, но на самом деле это ' Я просто понимаю эти входные данные для curveToPoint: controlPoint1: controlPoint2:
, которые меня сдерживают.
UPDATE | Благодаря ответу @Aruman я, наконец, получил форму. Это не на 100% (отсутствуют кривые в нижних углах, но на самом деле это симметричная форма, по крайней мере, сейчас :)