如何在xamarin.mac

时间:2018-11-14 23:20:10

标签: c# xamarin xamarin.mac

我正在尝试在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 :(得分:1)

Xamarin docs中的这段代码绘制了一个三角形,但应该可以带给您基本的思想。对于iOS和Mac,CoreGraphics API应该相同,因此一个示例应该可以轻松转换为另一个

//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);
}

答案 1 :(得分:0)

欢迎光临!很高兴看到更多Xamarin.Mac用户。

@SushiHangover对此进行了提示,但您需要处于有效的抽奖环境中。如果我过度解释,请原谅,但是像您所讨论的那样,自定义绘图通常是在NSView中完成的,通常是通过覆盖视图的DrawRect(CGRect dirtyRect)方法来完成的。 AppKit在适当的图形上下文中固有地调用该方法。因此,如果在视图的该方法内调用您的代码,将可以正常工作。请记住,这些绘图方法经常被调用并且必须高效。

如果要使用CGPath而不是NSBezierPath,则需要通过调用NSGraphicsContext.CurrentContext.CGContext.addPath(path)将该路径添加到上下文中。

我在这里为您制作了一个小小的Xamarin工作簿,标题为“ MacOS Custom Drawing”,显示了两种方式:https://github.com/NickSpag/Workbooks。我还建议使用工作簿进行绘图练习和测试,因为它们使连续快速地重新加载代码变得非常容易。