#c# #macos #line #nsview #custom-view
#c# #macos #строка #nsview #пользовательский вид
Вопрос:
Я новичок в программировании MAC, специфичном для OSX на C #; Я хотел бы иметь возможность обновлять customview для динамического рисования линий (т. Е. биржевых графиков), используя массив из ViewController.cs при наведении курсора мыши, я вообще не совсем там.
Во-первых, я пытаюсь выяснить, почему вообще ничего не отображается с помощью метода UpdateLayer (), когда я пытаюсь провести линию. Если бы я использовал ту же линию штриха в drawrect, это было бы слово только один раз, и я не могу передать какой-либо параметр из ViewController.cs, я также пытаюсь выяснить, как обновить customview, поэтому drawrect вызывается только один раз. Хотя мне нужно использовать UpdateLayer () вместо этого, если я хочу обновить представление, но из UpdateLayer ничего не отображается, обводка линии не работает.
Я долго искал в Интернете наглядный пример на C # cocoa, большинство примеров, которые я смог найти, находятся на других языках, таких как Swift, которые они используют setneedsdisplay по щелчку мыши, чтобы обновить customview, я не смог найти эквивалент в C #.
using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using AppKit;
using CoreGraphics;
namespace Mac13_UpdLayer
{
public partial class CustView : AppKit.NSView
{
#region Constructors
// Called when created from unmanaged code
public CustView(IntPtr handle) : base(handle)
{
Initialize();
}
// Called when created directly from a XIB file
[Export("initWithCoder:")]
public CustView(NSCoder coder) : base(coder)
{
Initialize();
}
// Shared initialization code
void Initialize()
{
this.WantsLayer = true;
this.LayerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.OnSetNeedsDisplay;
}
public override void DrawRect(CGRect dirtyRect)
{
base.DrawRect(dirtyRect);
}
public override bool WantsUpdateLayer
{
get
{
return true;
}
}
public override void UpdateLayer()
{
base.UpdateLayer();
NSColor.LabelColor.Set();
NSColor.Magenta.Set();
NSBezierPath path = new NSBezierPath();
path.LineWidth = 3;
CGPoint c001 = new CGPoint(0, 0);
CGPoint c003 = new CGPoint(this.AccessibilityFrame.Width, this.AccessibilityFrame.Height);
path.MoveTo(c001);
path.LineTo(c003);
path.Stroke();
}
#endregion
}
}
using System;
using AppKit;
using Foundation;
namespace Mac13_UpdLayer
{
public partial class ViewController : NSViewController
{
public ViewController(IntPtr handle) : base(handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Do any additional setup after loading the view.
// this.View.Layer.BackgroundColor = NSColor.DarkGray.CGColor;
}
public override NSObject RepresentedObject
{
get
{
return base.RepresentedObject;
}
set
{
base.RepresentedObject = value;
// Update the view, if already loaded.
}
}
partial void ButRefAction(Foundation.NSObject sender)
{
//declare array
//refresh customview from array
}
}
}