iphone - MonoTouch 中的简单 iPhone 图表应用程序

标签 iphone xamarin.ios diagramming

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

应用程序商店中可以找到许多图表示例,例如 MindMeister 和 SimpleMind 思维导图应用程序。

我需要用户能够单击 View 来“放下”新形状、为其添加标签,并可选择将其连接到现有形状。

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

我可以采取什么方法?

PS:如果这不适合SO,请随意打击!

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

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 元素类并覆盖 TouchesBeganTouchesMovedTouchesEnd 事件来实现某些交互性。

最佳答案

你想做的事并没有那么难。我还没有准备好示例,但我会给您一些可能帮助您入门的步骤。

  1. 创建自定义 View ,继承 UIView.这会保持你的形状 和文字。
  2. 在其中添加两个 subview 。这 UIImageView 将保存您的 形状和文本的 UILabel。
  3. 覆盖自定义 View 的 Draw 方法。在其中您可以将 View 的内容复制到图像上下文。
  4. 分配该上下文中的图像, 到另一层。
  5. 移动该层并做出响应 用户触及您的自定义 View 的 super View 。

简单的例子:

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

这个例子非常简单,不应该按原样使用。例如,您应该提供何时接收自定义 View 内容的逻辑。如果你像这样保留它,每次调用 Draw 方法时,它都会创建一个新的上下文。您只需执行一次。

将内容复制到图层后,您可以通过 super View 将该图层移动到您想要的任何位置,方法是将其添加到 super View 的图层并修改其框架。您不必为您的 super View 创建另一个自定义 View ,您只需创建一个自定义 UIGestureRecognizer,覆盖其自己的 Touches* 方法并将其添加到 super View 。

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

我希望这会有所帮助。

关于iphone - MonoTouch 中的简单 iPhone 图表应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230124/

相关文章:

iphone - 如何使用 Objective C 在 iPhone 中制作 .zip 文件?

ios - UITableViewCell subview 在选择时消失(但此 subview 中的内容可见)

xamarin.ios - 你能在 monotuch 中使用 assembly.load 吗?

iOS : View visible but not active

flowchart - 死简单的流程图工具

iphone - Obj-C,僵尸内存泄漏,我看不到?

iphone - 如果“实时字节数”随着时间的推移而变大而泄漏仪器未发现任何内存泄漏,那意味着什么?

c# - 在 Xamarin 中绑定(bind) PayPalMobile iOS 库

.net - 基于多线程的应用程序的哪种类型的设计图?

UML 图实际上很漂亮吗?