假设您在控制器中将所有按钮声明为插座并将它们与您的视图连接。
当心:大量未经测试的伪代码将随之而来;-)
@property IBOutlet UIButton *firstPianoKeyButton;
@property IBOutlet UIButton *secondPianoKeyButton;
@property IBOutlet UIButton *thirdPianoKeyButton;
... and so on ...
您现在可以做的是,将按钮一个接一个地放入一个数组中。
假设您有一个带有 12 个键的控制器,通常从中间的 C 键开始。
NSArray *pianoKeys = [NSArray arrayWithObjects:firstButton, secondButton, thirdButton, ..., nil];
不好,而且有更优雅和有效的方法可以做到这一点,但这应该给出图片。
更多关于数组的一般信息:NSArray。
在此处查看此视频以了解“更好”的方式:以编程方式创建多个 UIButton。虽然它适用于 iOS,但同样,它应该给出图片:-D
虽然看看这个:如何以编程方式创建一个基本的 UIButton?
好的。现在,您的控制器将收到例如 D# 的 NoteOn-Event,它对应于 MIDI 音符编号 63。假设这是一个整数,我们可以使用该整数访问我们的钢琴键数组中的相应元素。
所以我们需要一个偏移量来获得正确的索引,偏移量将是 60。为什么?我们的数组从索引 0 开始,但 12 键钢琴的音符编号从 60 开始。
在完整的 88 键钢琴上,第一个 MIDI 音符编号以 21 开头,因此在这种情况下这就是索引。
现在,我们可以使用按下键的 MIDI 音符编号计算数组索引,因此可以在视图中显示按下的相应按钮。
[pianoKeys objectAtIndex:(63-60)];
希望这会有所帮助。