MonoTouch中的简单iPhone绘图应用程序

MonoTouch中的简单iPhone绘图应用程序,iphone,xamarin.ios,diagramming,Iphone,Xamarin.ios,Diagramming,我有一个规范,可以在MonoTouch应用程序中构建一个非常简单的图表功能。到目前为止,我所做的一切都是基于表格的,所以这是一个新领域 在应用商店中可以找到许多图表示例,例如MindMeister和SimpleMindMindMapping应用程序 我需要用户能够点击一个视图来“放下”一个新的形状,给它贴上标签,并有选择地将它连接到一个现有的形状 实现这种交互功能的好方法是什么?我的第一个方法是放下一个从自定义图像创建的UIImageView,然后确保它能够响应触摸事件来移动它。但是,当您想要添

我有一个规范,可以在MonoTouch应用程序中构建一个非常简单的图表功能。到目前为止,我所做的一切都是基于表格的,所以这是一个新领域

在应用商店中可以找到许多图表示例,例如MindMeister和SimpleMindMindMapping应用程序

我需要用户能够点击一个视图来“放下”一个新的形状,给它贴上标签,并有选择地将它连接到一个现有的形状

实现这种交互功能的好方法是什么?我的第一个方法是放下一个从自定义图像创建的
UIImageView
,然后确保它能够响应触摸事件来移动它。但是,当您想要添加文本覆盖时,事情会变得更加复杂,因为您必须管理两个视图(图像和文本)

我可以采取什么方法

PS:如果这不适合这样做,请随意打击

更新:可以通过使用简单的标签覆盖来实现基本图表元素:

UILabel lbl = new UILabel(new RectangleF(...));
lbl.Text = "Whatever";
lbl.Layer.BorderWidth = 3f;
lbl.Layer.BorderColor ( new CGColor (1f, 0f, 0f) );
this.Add (lbl);

通过扩展gui元素类并覆盖
touchsbegind
touchsmoved
touchsend
事件,可以实现一些交互性。

您想要做的事情并不难。我还没有准备好一个例子,但我会给你一些可能帮助你开始的步骤

  • 创建自定义视图,继承 尤维尤。这会保持你的身材 和文本
  • 在其中添加两个子视图。这个 UIImageView将保存您的 文本的形状和标签
  • 替代自定义视图的绘图 方法。在其中,您可以将视图的内容复制到图像上下文中
  • 从该上下文中指定图像, 到另一层
  • 移动该层,做出响应 对用户进行自定义操作 视图的超级视图
  • 简单的例子:

    public CALayer ContentsLayer { get; set; }
    public override void Draw (RectangleF rect)
    {
        base.Draw(rect);
    
        // Create an image context
        UIGraphics.BeginImageContext(this.Bounds.Size);
    
        // Render the contents of the view to the context
        this.Layer.RenderInContext(UIGraphics.GetCurrentContext());
    
        // Assign the contents to the layer
        this.ContentsLayer = new CALayer();
        this.ContentsLayer.Contents = UIGraphics.GetImageFromCurrentImageContext().CGImage;
    
        // End the context
        UIGraphics.EndImageContext();
    }
    
    此示例非常简单,不应按原样使用。例如,您应该提供何时接收自定义视图内容的逻辑。如果保持这样,每次调用Draw方法时,它都会创建一个新的上下文。你只需要做一次

    将内容复制到图层后,可以通过superview将该图层添加到superview的图层并修改其框架,在该图层周围移动任意位置。您不必为superview创建另一个自定义视图,只需创建一个自定义UIgestureRecognitor,重写其自己的Touchs*方法并将其添加到superview即可

    这样,您就有一个对象可以移动(层),该层同时保存您的形状和文本

    我希望这有帮助