我有一个规范,可以在MonoTouch应用程序中构建一个非常简单的图表功能。到目前为止,我所做的一切都是基于表格的,所以这是一个新领域。
可以在应用商店中找到大量的图表示例,例如MindMeister和SimpleMind思维导图应用。
我需要用户能够点击视图以“放下”新形状,标记它,并可选择将其连接到现有形状。
实现这种交互功能的好方法是什么?我的第一个是放下从自定义图像创建的UIImageView
,然后确保它可以响应触摸事件来移动它。但是,当您想要添加文本叠加时,事情会变得更加复杂,因为您必须管理两个视图(图像和文本)。
我可以采用什么方法?
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
事件,可以实现一些交互。
答案 0 :(得分:1)
你想要做的并不是那么困难。我没有准备好示例,但我会给你一些可能有助于你入门的步骤。
简单示例:
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方法时它都会创建一个新的上下文。你只需要这样做一次。
将内容复制到图层后,您可以通过超级视图在任意位置移动该图层,方法是将其添加到超级视图的图层并修改其框架。您不必为超级视图创建另一个自定义视图,您只需创建自定义UIGestureRecognizer,覆盖其自己的Touches *方法并将其添加到superview。
这样你就可以移动一个物体(图层)来保存你的形状和文字。
我希望这会有所帮助。