我有一个规范,用于在 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 元素类并覆盖 TouchesBegan
、TouchesMoved
和 TouchesEnd
事件来实现某些交互性。
最佳答案
你想做的事并没有那么难。我还没有准备好示例,但我会给您一些可能帮助您入门的步骤。
- 创建自定义 View ,继承 UIView.这会保持你的形状 和文字。
- 在其中添加两个 subview 。这 UIImageView 将保存您的 形状和文本的 UILabel。
- 覆盖自定义 View 的 Draw 方法。在其中您可以将 View 的内容复制到图像上下文。
- 分配该上下文中的图像, 到另一层。
- 移动该层并做出响应 用户触及您的自定义 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/