Как нарисовать прямоугольник в xamarin.mac - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь нарисовать прямоугольник в фреймворке xamarin.mac. Кажется, что это может быть достигнуто с пространством имен CoreGrpahics, но я не уверен, как он соединяется с xamarin. Например

        NSColor.Black.Set();
        NSBezierPath.StrokeLine(new CGPoint(-10.0f, 0.0f), new CGPoint(10.0f, 0.0f));

Ничего не появляется на экране, когда я считаю, что должна появиться одна строка. Это кажется тривиальным в других Xamarin. фреймворки как есть встроенные функции доступны, но документация по xamarin.mac очень скудная.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Добро пожаловать!Рад видеть больше пользователей Xamarin.Mac.

@ SushiHangover намекнул на это, но вы должны быть в правильном контексте рисования.Простите, если я чересчур объясняю, но пользовательский рисунок, который вы обсуждаете, часто выполняется в NSView, обычно путем переопределения метода DrawRect(CGRect dirtyRect) представления.Этот метод по сути вызывается AppKit в соответствующем графическом контексте.Таким образом, ваш код будет работать нормально, если вызывается в этом методе представления.Имейте в виду, что эти методы рисования вызываются очень часто и должны быть эффективными.

Если бы вы использовали CGPath вместо NSBezierPath, вам нужно добавить этот путь в контекст, вызвав NSGraphicsContext.CurrentContext.CGContext.addPath(path).

Я сделал для вас небольшую рабочую книгу Xamarin под названием «Пользовательский рисунок MacOS», которая показывает оба способа: https://github.com/NickSpag/Workbooks. Я бы также рекомендовал рабочие книги для практики рисования и тестирования, поскольку они делают это.очень легко постоянно и быстро перезагружать ваш код.

0 голосов
/ 15 ноября 2018

этот код из Xamarin docs рисует треугольник, но должен дать вам основную идею. 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);
}
...