Только 1 случай работает в операторе switch (Цель C) - PullRequest
3 голосов
/ 30 июля 2011

Я работаю в XCode над приложением синтезатора.Я использую пользовательские ползунки и ручки.Я хочу, чтобы они отправляли управляющие значения получателям во встроенном патче Pure Data (я использую libpd в качестве библиотеки и оболочки Pure Data).

У меня есть несколько пользовательских ползунков и регуляторов на моем интерфейсе.Я хочу, чтобы каждый из них отправлял только свои собственные значения управления независимо от других ползунков / регуляторов.

Я использую теги и оператор 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 ]

2 голосов
/ 30 июля 2011

Боже, все еще здесь?

Вам, очевидно, нужно назначить отдельную цель для каждого ползунка!

Кроме того, в вашем примере вы назначаете тег перед созданием ползунка, нетхорошо.Вы должны всегда ставить 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"];
}

И если вы собираетесь использовать мой ответ на ваш другой вопрос , наименееВы могли бы сделать, это дать ему голос.; -]

0 голосов
/ 30 июля 2011

Вы должны перепроверить синтаксис переключателя здесь . По сути, вы должны потерять внутренние разделители.

...