Простое приложение iPhone Diagramming в MonoTouch - PullRequest
2 голосов
/ 03 июня 2011

У меня есть спецификация для встраивания очень простых возможностей построения диаграмм в приложение 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.

1 Ответ

1 голос
/ 04 июня 2011

То, что вы хотите сделать, не так сложно.У меня нет готового примера, но я дам вам несколько шагов, которые могут помочь вам начать работу.

  1. Создайте пользовательское представление, наследующее UIView.Это будет держать вашу форму и текст.
  2. Добавьте два подпредставления в нем.UIImageView, который будет содержать вашу форму, и UILabel для текста.
  3. Переопределите метод Draw вашего пользовательского представления.Внутри него вы можете скопировать содержимое представления в контекст изображения.
  4. Назначить изображение из этого контекста другому слою.
  5. Переместить этот слой, реагируя на прикосновения пользователя к вашему пользовательскому элементу.superview вида.

Простой пример:

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 * и добавить его в суперпредставление.

Таким образом, у вас есть один объект для перемещения (слой), который содержит как вашу форму, так и ваш текст.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...