xcode - 只有 1 个 case 在 switch 语句中工作( objective-c )

标签 xcode audio tags slider switch-statement

我正在使用 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/

相关文章:

html 和 css 标签不能正常工作可能是 descender 标签?

ios - 当用户在 UITextView 中键入内容时,如何自动更新字符串变量?

php - jsonFile PHP 服务器问题

ios - 从命令行运行 'Cedar' 单元测试时出错

javascript - 仅在下午1点至下午2点之间在网站背景上播放音频

ios - 按标签删除行

objective-c - 未使用的属性访问结果

android - 使用 Android 服务的音频逐帧动画

c# - 使用生成的波形数据在 .NET 中播放声音

svn - Hudson:我如何使用参数化构建来执行 svn checkout 和 svn 标记?