Рассмотрим как с помощью класса NSBezierPath можно нарисовать простую прямоугольную выноску.
NSBezierPath *thePath = [NSBezierPath bezierPath]; [thePath moveToPoint:NSMakePoint(NSMidX(aDirtyRect), NSMaxY(aDirtyRect))]; NSUInteger theArrWidth = 32, theArrHeight = 24; [thePath lineToPoint:NSMakePoint(NSMidX(aDirtyRect) + theArrWidth / 2, NSMaxY(aDirtyRect) - theArrHeight)]; [thePath lineToPoint:NSMakePoint(NSMaxX(aDirtyRect), NSMaxY(aDirtyRect) - theArrHeight)]; [thePath lineToPoint:NSMakePoint(NSMaxX(aDirtyRect), NSMinY(aDirtyRect))]; [thePath lineToPoint:NSMakePoint(NSMinX(aDirtyRect), NSMinY(aDirtyRect))]; [thePath lineToPoint:NSMakePoint(NSMinX(aDirtyRect), NSMaxY(aDirtyRect) - theArrHeight)]; [thePath lineToPoint:NSMakePoint(NSMidX(aDirtyRect) - theArrWidth / 2, NSMaxY(aDirtyRect) - theArrHeight)]; [thePath closePath]; [[NSColor colorWithDeviceWhite:1.0 alpha:1.0] setFill]; [thePath fill]; [[NSColor blueColor] setStroke]; [thePath stroke];
Крыша у выноски получилась более четкая, чем остальные краевые линии собственно потому что мы краевые линии рисовали на границе вьюхи. Тут не помешало бы сделать отступ с помощью NSInsetRect.
Если дальше развивать код, то с помощью функции curveToPoint:controlPoint1:controlPoint2: можно сделать закругленные углы, сделав тем самым скругленную прямоугольную выноску.
Если дальше развивать код, то с помощью функции curveToPoint:controlPoint1:controlPoint2: можно сделать закругленные углы, сделав тем самым скругленную прямоугольную выноску.
P.S. Кстати еще можно автоматически парсить SVG path и рисовать его на вью.