Изменение состояния UIButton происходит только после окончания касаний - PullRequest
1 голос
/ 14 апреля 2011

Извините, если это основной вопрос, я не могу найти окончательный ответ.

Я настроил 4 кнопки:

// Add the normal and selected state for each button
UIImage *buttonImage =  [UIImage imageNamed:[NSString stringWithFormat:@"HotspotNumber2-%i.png",(hotspotID +1)]];
[hotspotButton setImage:buttonImage forState:UIControlStateNormal];
UIImage *buttonImageSelected =  [UIImage imageNamed:[NSString stringWithFormat:@"HotspotNumber2-%is.png",(hotspotID +1)]];
[hotspotButton setImage:buttonImageSelected forState:UIControlStateSelected];
[hotspotButton setImage:buttonImageSelected forState:UIControlStateHighlighted];
[hotspotButton addTarget:self action:@selector(hotspotTouch:) forControlEvents:UIControlEventTouchDown];

И я улавливаю события касания в методе:

// Called when a hotspot is touched
-(void)hotspotTouch:(id)sender{

    // Deselect the hotspot currently selected
    if (selectedHotspot) [selectedHotspot setSelected:NO];

    selectedHotspot = (UIButton *)sender;
    [selectedHotspot setSelected:YES];

    // Get dictionary of hot spot that is pressed
    NSDictionary *hotspot = [hotspots objectAtIndex:[selectedHotspot tag]];
    NSString *imageFileName = [hotspot objectForKey:ksHotspotItemKey];
    if ([imageFileName length] > 0) currentImageView.image = [UIImage imageNamed:imageFileName];
    }
}

Проблема, с которой я столкнулся, заключается в том, что выделенное изображение кнопки не отображается, пока пользователь не отпустит палец, что является заметной задержкой. Я видел, как другие решали подобные проблемы, изменяя фоновое изображение вместо состояния кнопки или выполняя селектор после задержки, чтобы цикл выполнения получил шанс на завершение. Оба метода кажутся мне хаком, и я был бы признателен, если бы кто-нибудь смог объяснить, что здесь происходит и какой самый надежный способ добиться эффекта, который, как только пользователь нажимает на кнопку, переходит в выделенное состояние.

Заранее спасибо,

Dave

1 Ответ

1 голос
/ 27 апреля 2011

Нашли работу вокруг.Я создал один метод для TouchDown и один для TouchUpInside и TouchUpOutside.TouchDown просто отменяет выбор кнопки, если она уже выбрана, и изменяет изображение моего вида.Событие TouchUp устанавливает выбранное свойство кнопки.Поскольку оба выделенных и выбранных изображения одинаковы, общий эффект заключается в том, что кнопка изменяется при касании кнопки и остается такой же после событий касания.Код здесь:

// Called when a hotspot is touched down
-(void)hotspotTouchDown:(id)sender{

    // Deselect the hotspot currently selected if it exists
    if (selectedHotspot) [selectedHotspot setSelected:NO];

    // Get dictionary of hot spot that is pressed
    NSDictionary *hotspot = [hotspots objectAtIndex:[sender tag]];

    // If the class of the hotspot is 'self' then replace the current image with a new one given in the hotspot data
    if ([[hotspot objectForKey:ksHotspotClassKey] isEqualToString:ksHotspotClassSelf]) {

        NSString *imageFileName = [hotspot objectForKey:ksHotspotItemKey];
        if ([imageFileName length] > 0) currentImageView.image = [UIImage imageNamed:imageFileName];
    }
}

// Called when a hotspot is touched up
-(void)hotspotTouchUp:(id)sender{
    // Set the selected property of the button
    selectedHotspot = (UIButton *)sender;
    [selectedHotspot setSelected:YES];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...