Я пытаюсь нарисовать прямоугольник в рамках xamarin.mac. Кажется, что это может быть достигнуто с пространством имен CoreGrpahics, но я не уверен, как он соединяется с xamarin. Например
NSColor.Black.Set();
NSBezierPath.StrokeLine(new CGPoint(-10.0f, 0.0f), new CGPoint(10.0f, 0.0f));
Ничего не появляется на экране, когда я верю, что должна появиться одна строка. Это кажется тривиальным в других Xamarin. фреймворки, как есть, имеют встроенные функции, но документация по xamarin.mac очень скудна.
Добро пожаловать! Рад видеть больше пользователей Xamarin.Mac.
@SushiHangover намекнул на это, но вы должны быть в правильном контексте рисования. Извините, если я чересчур объясняю, но пользовательский рисунок, который вы обсуждаете, часто выполняется в NSView, обычно путем переопределения DrawRect(CGRect dirtyRect)
. Этот метод по сути вызывается AppKit в соответствующем графическом контексте. Таким образом, ваш код будет работать нормально, если вызывается в этом методе представления. Имейте в виду, что эти методы рисования вызываются очень часто и должны быть эффективными.
Если вы должны использовать CGPath вместо NSBezierPath, вам нужно добавить этот путь в контекст, вызвав NSGraphicsContext.CurrentContext.CGContext.addPath(path)
.
Я сделал для вас небольшую рабочую книгу под названием "Пользовательский рисунок MacOS", которая показывает оба пути: https://github.com/NickSpag/Workbooks. Я бы также порекомендовал Workbooks для рисования и тестирования, поскольку они позволяют легко и быстро перезагружать ваш код.
этот код из документов Xamarin рисует треугольник, но должен дать вам основную идею. API CoreGraphics должен быть одинаковым для iOS и Mac, поэтому пример для одного должен легко переводиться на другой
//get graphics context
using (CGContext g = UIGraphics.GetCurrentContext ()) {
//set up drawing attributes
g.SetLineWidth (10);
UIColor.Blue.SetFill ();
UIColor.Red.SetStroke ();
//create geometry
var path = new CGPath ();
path.AddLines (new CGPoint[]{
new CGPoint (100, 200),
new CGPoint (160, 100),
new CGPoint (220, 200)});
path.CloseSubpath ();
//add geometry to graphics context and draw it
g.AddPath (path);
g.DrawPath (CGPathDrawingMode.FillStroke);
}