Как нарисовать прямоугольник в xamarin.mac

2

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

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

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

  • 0
    Каков контекст вашей StrokeLine? то есть это делается в переопределении DrawRect?
Теги:
xamarin
xamarin.mac

2 ответа

0
Лучший ответ

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

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

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

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

1

этот код из документов 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);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню