作为obj-c的noobie,我在这个问题上坚持了一两天。如果有人能提供帮助,我们将不胜感激。
我有一个ipad应用程序,我正在使用更改图像的按钮(想想'关闭静音'按钮)来表示和控制笔记本电脑上的应用程序。
我有一个IBAction触发midi消息通过网络发送到我的笔记本电脑 - 一切都很好用。
UIButton的更新发生在笔记本电脑上我的应用程序返回时,通过midi消息,而不是在此函数中的touchDown的IBAction中;
- (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);
}
}
在我的ipad UIButton上触摸时,所有这些都可以正常运行。 我的问题是,当我从我的笔记本电脑应用程序发送相同的midi消息时,我的ipad上的gui不会更新,直到我触摸应该更改的特定按钮。
我尝试过查看setNeedsDisplay,但这只会抛出autoreleasepool警告。
我确信这是我想念的简单事。
有人可以帮忙吗?
我来自C背景,为MaxMSP编程guis,而jbox_redraw是前进的方式(我知道这不是我应该寻找答案的地方,但这是我正在寻找的那种功能)通过midi消息
感谢您抽出时间看这个。
此致 利
答案 0 :(得分:1)
首先,尝试使用setBackgroundImage forState而不是setImage forState。 如果有可能突出显示您的按钮,请尝试使用按位OR运算符(控件状态为位掩码)为“正常”和“突出显示”等情况添加额外的setImage forState行
UIControlStateNormal | UIControlStateHighlighted
如果仍有问题,请在为每个州设置图像后,尝试以编程方式选择和取消选择按钮:
[muteButtonIds[controllerNumber] setSelected:YES];
[muteButtonIds[controllerNumber] setSelected:NO];