2013-10-25 2 views
0

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

мне нужно, чтобы иметь возможность изменить образ одной из этих кнопок, когда его сливают и изменить его обратно через 5 секунд, однако я совершенно не знаю, как это сделать D:

кто-то может предложить возможный решение пожалуйста?

+0

Все ли кнопки используют одно и то же действие? То есть, тот же метод вызывает каждую кнопку, когда вы нажимаете на них? – neilco

+0

Да, все они используют один и тот же метод. –

ответ

1

Когда вы нажмете кнопки, они будут выполнять свой селектор действий. Параметр sender, переданный в селектор действий, фактически является кнопкой, которая была нажата, и вы можете использовать ее для изменения ее свойств. Чтобы отменить изменение, вы можете использовать dispatch_after для задержки вторичного изменения.

- (void)buttonWasTapped:(id)sender 
{ 
    __block UIButton *button = (UIButton *)sender; // This is the button that was tapped 
    [button setImage:[UIImage imageNamed:@"blah"] forState:UIControlStateNormal]; 

    double delayInSeconds = 5.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [button setImage:[UIImage imageNamed:@"original_image"] forState:UIControlStateNormal]; 
    }); 
} 
+0

+1 Ваш ответ намного лучше, поэтому я удалил свою. Хотя я думаю, что первый setImage: forState должен иметь UIControlStateHighlighted, не так ли? – bizsytes

+0

@bizsytes Это зависит от того, вызвано ли действие для 'UIControlEventTouchDown' или' UIControlEventTouchUpInside'. Если это 'UIControlEventTouchDown', тогда да, имеет смысл использовать' UIControlStateHighlighted'. – neilco

+0

Я все еще довольно новичок, что означает «_block»? –