2011-07-30 2 views
3

신디사이저 응용 프로그램의 Xcode에서 작업하고 있습니다. 커스텀 슬라이더와 노브를 사용하고 있습니다. 필자는 이들이 내장 된 순수 데이터 패치 (pubs 데이터 라이브러리와 래퍼로서 libpd를 사용하고 있음)에서 제어 값을 수신자에게 보내주기를 바란다.switch 문에서 1 개의 case 만 작동합니다 (Objective C)

내 인터페이스에 여러 개의 맞춤 슬라이더와 손잡이가 있습니다. 나는 각자가 다른 슬라이더/노브와 독립적으로 자신의 컨트롤 값만을 보내길 원합니다.

태그와 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

이런, 아직도 그럴까요?

분명히 각 슬라이더에 별도의 대상을 지정해야합니다!

또한 예에서 슬라이더를 만들기 전에 태그를 지정합니다. 좋지는 않습니다. 속성을 설정하기 전에 항상 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에 제공합니다. ; -]

+0

@ WrightsCS : upvote? 나는 지금 그렇게했다고 생각한다. 마지막 게시물을 유용하다고 표시했습니다. 나는 정말로 당신 (그리고 다른 모든 사람들이 나에게 제공하고있는)에 대한 모든 도움과 충고에 감사한다. –

+0

@ WrightsCS : 그게 효과가 !!!! 당신이 말했듯이 슬라이더를 만들기 전에 태그를 할당했기 때문에 작동하지 않았습니다. 당신은 최고 괴짜입니다! 고맙습니다. 어떻게하면이 사이트에서 엄지 손가락을 크게 줄 수 있습니까? –

+0

체크 표시와 UP 화살표를 똑딱 거리십시오. 다른 질문도 마찬가지입니다! – WrightsCS

0

스위치 구문 here을 다시 확인해야합니다. 기본적으로 내부 구획 문자는 없어야합니다.

관련 문제