Как программно выделить UIButton? - PullRequest
4 голосов
/ 09 декабря 2008

У меня было много пользователей, жалующихся на то, что маленькую кнопку с надписью «i» сложно нажать на iPhone. Хорошо, достаточно просто - я просто вставил за нее толстую невидимую кнопку, которую нельзя пропустить даже при самых неаккуратных прикосновениях пальцев, и, когда вы ее касаетесь, она выполняет действие infoButtonAction.

Дело в том, что я хотел бы мигать саму кнопку информации в течение примерно 0,25 секунды, просто чтобы дать визуальный тип обратной связи "это то, что происходит". Я имею в виду, я уже предполагаю, что вы хотели нажать кнопку «i», поэтому я просто отношусь к ней так, как будто вы DID нажали ее.

Я пробовал это, но это не работает:

    UIImage* normalImage = [_infoButton imageForState:UIControlStateNormal];
    UIImage* highlighted = [_infoButton imageForState:UIControlStateHighlighted];
    _infoButton.highlighted = YES;                                          // flash the button
    [_infoButton setImage:highlighted forState:UIControlStateNormal];
    [_infoButton setNeedsDisplay];                                          //* FIXME: No flash?!

    [(AppDelegate*)[[UIApplication sharedApplication] delegate] infoTap];   // do the info action

    _infoButton.highlighted = NO;   
    [_infoButton setImage:normalImage forState:UIControlStateNormal];
    [_infoButton setNeedsDisplay];

Любые идеи о том, как получить поведение, которое я хочу?

(Я также открыт для альтернативных идей по поводу обратной связи с пользователями, но все еще любопытно, как бы я это сделал. Представьте себе, что вместо этого у меня есть «игра» / розыгрыш, где вы нажимаете кнопку «ОК» и «отменяете» "мигает, и наоборот, или что-то столь же глупое.)

Ответы [ 3 ]

4 голосов
/ 09 декабря 2008

Размер кнопки «i» должен быть 44x44 (стандартный размер пальца Apple), что можно сделать в Интерфейсном Разработчике.

Для некоторых анимаций я бы посоветовал заглянуть в Core Animation.

1 голос
/ 09 декабря 2008

Проблема в том, что вы помечаете свою кнопку как нуждающуюся в отображении (вызов -setNeedsDisplay не нужен; кнопка вызывает это внутренне), но при этом никогда не позволяете циклу выполнения показывать новое изображение.

В Какао вы можете использовать что-то вроде -performClick:, но это не доступно на iPhone.

Вместо этого я предлагаю вам поэкспериментировать с вызовом -setSelected: или -setHighlighted: с задержкой между ними.

0 голосов
/ 09 декабря 2008

Я не знаю точно, что происходит в вашем infotap методе, но там, похоже, нет ничего, что могло бы вызвать большую задержку между вашим первым setImage: вызовом и вторым. Я предполагаю, что все происходит быстрее, чем видит глаз. Я бы посоветовал взглянуть на NSTimer, чтобы попытаться установить там определенную задержку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...