只有1个案例在switch语句中工作(Objective C)

时间:2011-07-30 00:41:24

标签: xcode audio tags slider switch-statement

我在合成器应用程序中使用Xcode。我正在使用自定义滑块和旋钮。我希望这些将控制值发送到嵌入式Pure Data补丁中的接收器(我使用libpd作为纯数据库和包装器)。

我的界面上有多个自定义滑块和旋钮。我希望每个人只发送自己的控制值,而与其他滑块/旋钮无关。

我正在使用标签和switch语句。 问题是只有第一种情况正常,所有滑块和旋钮都将控制值发送给同一个接收器。

- (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;
    }     
}

有人可以帮忙吗?感谢。

2 个答案:

答案 0 :(得分:2)

Geez,还在吗?

你显然需要为每个滑块分配一个单独的目标!

此外,在您的示例中,您在创建滑块之前分配标记,没有任何好处。在设置任何属性之前,您应始终放置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,你可以做的最少就是给它一个upvote。 ; - ]

答案 1 :(得分:0)

您应该重新检查切换语法here。基本上,你应该失去内部分隔符。