Установить UIImage на основе тега - PullRequest
1 голос
/ 05 января 2012

Я работаю над сценарием, который просматривает массив светодиодных индикаторов UIImageView, которые установлены в числовом порядке и выбираются по тегу. В зависимости от шага (он же номер) он на светодиодном изображении отображается как вкл или выкл. Основная цель этого метода - сделать текущий шаг и отобразить изображение «LED on», вычитая его на единицу, и отобразить изображение «LED off» для предыдущего шага. Таким образом, одновременно должен гореть только один светодиод.

К сожалению, я могу только правильно отобразить изображение "LED on". Все светодиоды в последовательности загораются, но они никогда не выключаются. Мое первое предположение состоит в том, что я не вычитаю NSInterger в правильном направлении. Однако, когда я проверяю журнал, все там, где и должно быть. Если текущий шаг - 2, предыдущий - 1. Не знаю, почему это не работает. Спасибо!

sequencerLocation и previousLocation устанавливаются как свойства.

- (void)clockLoop:(UInt8)seqClockPulse
{
//cast to an int to use in loop
NSInteger stepCount = sequencerSteps;

//increment sequencer on pulse in
sequencerLocation++;

if(sequencerLocation > stepCount)
{
    sequencerLocation = 1;
}

//setup previous step location
previousLocation = (sequencerLocation - 1);

if (previousLocation == 0)
{
    previousLocation = stepCount;
}

//change led color in led array
for (UIImageView *led in sequencerLEDArray)
{
    if(led.tag == sequencerLocation)
    {
        UIImageView *previousLed = (UIImageView *)[led viewWithTag:previousLocation];
        [previousLed setImage:[UIImage imageNamed:@"images/seq_LED_off.png"]];
        NSLog(@"Previous: %d", previousLocation);

        UIImageView *currentLed = (UIImageView *)[led viewWithTag:sequencerLocation];
        [currentLed setImage:[UIImage imageNamed:@"images/seq_LED_on.png"]];
        NSLog(@"Current: %d", sequencerLocation);
    }
}

}

1 Ответ

4 голосов
/ 05 января 2012
//change led color in led array
for (UIImageView *led in sequencerLEDArray)
{
if(led.tag == sequencerLocation)
{
    //  I THINK the problem is here
  //  UIImageView *previousLed = (UIImageView *)[led viewWithTag:previousLocation];
    //  TRY THIS instead
    UIImageView *previousLed = [led.superview viewWithTag:previousLocation];
    [previousLed setImage:[UIImage imageNamed:@"images/seq_LED_off.png"]];
    NSLog(@"Previous: %d", previousLocation);

    // HERE you don't need to search for the tag you already tested for it in your if statement
    UIImageView *currentLed = (UIImageView *)[led viewWithTag:sequencerLocation];
    [currentLed setImage:[UIImage imageNamed:@"images/seq_LED_on.png"]];
    NSLog(@"Current: %d", sequencerLocation);
}
}

viewWithTag:
Обсуждение

Этот метод выполняет поиск текущего представления и всех его подпредставлений для указанного представления.

Так что, когда вы ищете led по его тегу, он возвращает себя, но когда вы ищете его брата, он не находит его, поэтому я предлагаю led.superview в качестве места для поиска вашего тегародитель должен быть в состоянии найти другого ребенка.

...