Из того, что я понимаю после разговора с Кишором:
Пользователи могут отмечать определенные области перетаскиванием мышью и соответственно добавлять комментарии.Разметка и комментарий хранятся в базе данных.
За один раз увеличивается только одно изображение, и это изображение должно отображать все разметки.Нажатие на разметку вызовет всплывающее окно, показывающее связанный комментарий.
Очевидно, что разметка является довольно дорогой, поэтому после рисования определенная разметка должна использоваться повторно, когда пользователь переключается между изображениями.Вопрос теперь:
Как повторно использовать пометки, отображаемые на изображении?
Ответ:
Использовать Object
или Dictionary
гдеВы создаете одну запись для каждого изображения, и эта запись указывает на Array
наценок.Вы можете создать удобный класс для инкапсуляции функциональности этой карты:
package {
import flash.display.DisplayObject;
public class Markups {
private var _map : Object;
public function Markups() {
_map = new Object();
}
public function addMarkup(imageId : String, markup : DisplayObject) : void {
if (!_map[imageId]) _map[imageId] = new Array();
(_map[imageId] as Array).push(markup);
}
public function hasMarkups(imageId : String) : Boolean {
return _map[imageId] !== undefined;
}
public function getMarkups(imageId : String) : Array {
return _map[imageId];
}
public function removeMarkup(imageId : String, markup : DisplayObject) : void {
var markups : Array = _map[imageId];
var index : int = markups.indexOf(markup);
markups.splice(index, 1);
if (!markups.length) delete _map[imageId];
}
}
}
Храните эту карту в месте, доступном из контейнера изображений.
var markupsPerImage : Markups = new Markups();
Добавьте или удалитеразметка выглядит следующим образом:
markupsPerImage.addMarkup(myImage.id, markupView);
markupsPerImage.removeMarkup(myImage.id, markupView);
Всякий раз, когда пользователь меняет текущее изображение, вы 1. очищаете все пометки последнего и 2. добавляете все пометки, хранящиеся на карте.
В контейнере изображения:
public function setImage(myImage : MyImage) : void {
// remove markups
while (markupContainer.numChildren) {
markupContainer.removeChildAt(0);
}
// add markups
var markups : Array = markupsPerImage.getMarkups(myImage.id);
var markup : MarkupView;
foreach (markups as markup) {
markupContainer.addChild(markup);
}
}
Примечания:
В примере кода предполагается, что у вас есть контейнер разметки, в котором размещены все разметки.Этот контейнер должен иметь ссылку на карту разметки.