2012-02-16 7 views
0

У меня есть подкласса UIView (currentMapView), который рисует карту нескольких состояний, используя серию CGMutablePaths, вытащенную из файла XML. Когда пользователь вступает в состояние, цвет заливки меняется с зеленого на фиолетовый. Сейчас я выясняю, какое состояние было задействовано на лету, используя CGPathContainsPoint, чтобы сообщить, какой путь был использован, и затем задаю цвет заливки этого пути и перезагрузите представление, используя setNeedsDisplay. Проблема заключается в том, что мне нужно повторно использовать currentMapView несколько раз (разные группы состояний), и я не уверен, как мне следует отслеживать, какие пути пользователь набрал, поэтому я могу покрасить их снова, когда я перезагружаю представление из файла XML.Отслеживание изменений в UIView

Вот шаг за шагом пример того, что я делаю:

  1. currentMapView загружает данные о пути из файла XML и рисует карту восточной части Соединенных Штатов.

  2. Пользователь вводит Флориду, и получается фиолетовым (я называю «setNeedsDisplay» на currentMapView после установки цвета заливки пути Флориды с помощью CGContextSetFillColorWithColor)

  3. Пользователя выстукивает Северную Каролину, и получается фиолетовым (я называю «setNeedsDisplay» на currentMapView после установки цвета заливки пути Северной Каролины, используя CGContextSetFillColorWithColor)

  4. пользователь переходит к другой точке зрения, и мне нужно сделать еще одну группу государств в currentMapView (обтирать, что его там).

    Все работает отлично.

  5. Когда пользователь вернется к просмотру с первого шага, и я снова нарисую карту восточных штатов США, мне нужно снова покрасить пути Флориды и Северной Каролины.

Что было бы лучшим способом отслеживать пути, к которым коснулся пользователь?

ответ

2

Самый простой способ - иметь глобальную переменную NSMutableSet с именем statesTouched. Инициализируйте его до пустого набора в application:didFinishLaunchingWithOptions:.

Каждый раз, когда пользователь вводит в состояние, добавьте название государства (или ссылку на объект, который представляет состояние) в комплекте:

[statesTouched addObject:touchedStateName]; 

При загрузке вида с состояниями, петли над состоянием в представлении и проверить, есть ли каждый из них:

for (NSString *stateName in viewStateNames) { 
    if ([statesTouched member:stateName]) { 
     [self setColor:[UIColor purpleColor] forStateName:stateName]; 
    } 
} 
+0

Спасибо! Вот так! – Frank

Смежные вопросы