UIButton setImage не обновляется после несенсорного действия - PullRequest
0 голосов
/ 13 сентября 2011

Как новичок в obj-c, я застрял в этом вопросе на день или два.Если бы кто-нибудь мог помочь, это было бы очень признательно.

У меня есть приложение для ipad, над которым я работаю с кнопками, которые изменяют изображения (например, кнопка «отключить звук») для представления и управления приложением на моем ноутбуке.

У меня есть IBAction, который запускает отправку миди-сообщения на мой ноутбук через сеть - здесь все работает хорошо.

Обновление UIButton происходит по возвращении из моего приложения на ноутбуке черезMIDI-сообщение, отсутствующее в IBAction для touchDown, в этой функции void;

    - (void) midiSource:(PGMidiSource*)midi midiReceived:(const MIDIPacketList *)packetList
    {
        int firstByte = 0;
        int secondByte = 0;
        int controllerNumber = 0;
        int controllerValue = 0;

        const MIDIPacket *packet = &packetList->packet[0];
        for (int i = 0; i < packetList->numPackets; i++) {
            for (int j = 0; j < packet->length; j++) {
                if (secondByte) {
                    controllerValue = packet->data[j];
                    secondByte = 0;
                    firstByte = 0;
                    if (controllerNumber < 8) {
                        if (!controllerValue) {
                            [muteButtonIds[controllerNumber] setImage:imageMuted forState:UIControlStateNormal];
                            [muteButtonIds[controllerNumber] setImage:imageMuted forState:UIControlStateSelected];
                        }
                        else {
                            [muteButtonIds[controllerNumber] setImage:imageUnmuted forState:UIControlStateNormal];
                            [muteButtonIds[controllerNumber] setImage:imageUnmuted forState:UIControlStateSelected];
                        }
                    }
                }
                if (firstByte) {
                    secondByte = 1;
                    controllerNumber = packet->data[j];
                }
                if (packet->data[j]== 176) {
                    firstByte = 1;
                }
            }
            packet = MIDIPacketNext(packet);
        }
    }

Здесь все работает без проблем при касании Downown на моем ipad-кнопке ipad.Моя проблема в том, что когда я отправляю то же миди-сообщение из моего приложения для ноутбука, графический интерфейс на моем ipad не обновляется до тех пор, пока я не коснусь вниз определенной кнопки, которая должна измениться.выдаёт только предупреждения об автозапуске.

Я уверен, что это что-то простое, что мне не хватает.

Может кто-нибудь помочь?

Я пришел из C, программирование для MaxMSPи jbox_redraw - это путь вперед (я знаю, что это не то место, где я должен искать ответы, но именно такую ​​функциональность я ищу) через миди-сообщение

Спасибо, что уделили время на это.

С уважением, Ли

1 Ответ

1 голос
/ 14 сентября 2011

Во-первых, попробуйте использовать setBackgroundImage forState вместо setImage forState. Если есть вероятность, что ваша кнопка может быть выделена, попробуйте добавить дополнительные строки setImage forState для ситуаций, таких как «Нормальный» И «Выделенный», используя оператор побитового ИЛИ (состояния управления - битовые маски)

UIControlStateNormal | UIControlStateHighlighted

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

[muteButtonIds[controllerNumber] setSelected:YES];
[muteButtonIds[controllerNumber] setSelected:NO];
...