我正在尝试在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 :(得分: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。我还建议使用工作簿进行绘图练习和测试,因为它们使连续快速地重新加载代码变得非常容易。