我正在使用 Xcode 开发合成器应用程序。我正在使用自定义 slider 和旋钮。我希望这些将控制值发送到嵌入式纯数据补丁中的接收器(我将 libpd 用作纯数据库和包装器)。
我的界面上有多个自定义 slider 和旋钮。我希望每个人都独立于其他 slider /旋钮发送自己的控制值。
我正在使用标签和 switch 语句。 问题是只有第一种情况有效,所有 slider 和旋钮都将控制值发送到同一个接收器。
- (void)viewDidLoad {
[super viewDidLoad];
// Slider 1
slider.tag = 0;
slider = [[[DCSlider alloc] initWithDelegate:self] autorelease];
slider.frame = CGRectMake(0,0,20,100);
[self.sliderContainer addSubview: slider];
// Slider 2
slider2.tag = 1;
slider2 = [[[DCSlider alloc] initWithDelegate:self] autorelease];
slider2.frame = CGRectMake(0,0,20,100);
[self.sliderContainer2 addSubview: slider2];
}
然后我在这里实现这个方法...
- (void)controlValueDidChange:(float)value sender:(id)sender {
DCSlider *slidertag = (DCSlider *)sender;
switch (slidertag.tag)
{
case 0:
{
[PdBase sendFloat:value toReceiver:@"beatvol"];
}
break;
case 1:
{
[PdBase sendFloat:value toReceiver:@"bassvol"];
}
break;
}
}
有人可以帮忙吗?谢谢。
最佳答案
哎呀,还在吗?
您显然需要为每个 slider 分配一个单独的目标!
此外,在您的示例中,您在创建 slider 之前分配了标签,这不好。您应该始终在设置任何属性之前放置您的 init
。
- (void)viewDidLoad
{
[super viewDidLoad];
// Slider 1
slider = [[[DCSlider alloc] initWithDelegate:self] autorelease];
slider.tag = 0;
slider.frame = CGRectMake(0,0,20,100);
[slider addTarget:self action:@selector(controlBassValueDidChange:) forControlEvents:UIControlEventValueChanged];
[self.sliderContainer addSubview: slider];
// Slider 2
slider2 = [[[DCSlider alloc] initWithDelegate:self] autorelease];
slider2.tag = 1;
slider2.frame = CGRectMake(0,0,20,100);
[slider2 addTarget:self action:@selector(controlBeatValueDidChange:) forControlEvents:UIControlEventValueChanged];
[self.sliderContainer2 addSubview: slider2];
}
- (void)controlBassValueDidChange:(float)value sender:(id)sender
{
[PdBase sendFloat:value toReceiver:@"bassvol"];
}
- (void)controlBeatValueDidChange:(float)value sender:(id)sender
{
[PdBase sendFloat:value toReceiver:@"beatvol"];
}
如果你打算使用 my answer to your other question ,你至少可以给它一个赞成票。 ;—]
关于xcode - 只有 1 个 case 在 switch 语句中工作( objective-c ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880332/