2012-01-10 4 views
0

이 응용 프로그램을 개발하려고하는데 정말 힘들었습니다. 이미지 필터 역할을하는 UIScrollViews 집합을로드하려면 UISegmentedControl을 사용하려고합니다.UISegmentedControl 및 switch 문 관련 문제

UIScrollViews에 큰 문제가있는 것을 제외하면 (이유는 새 세그먼트가 각 세그먼트에서 개별적으로 만들어 짐), 세그먼트 1을 클릭하면 모든 6 개의 UIScrollViews가로드되고 첫 번째 스크롤 만 허용됩니다. 마지막 세그먼트 만 선택하면 UIScrollView가로드됩니다 ...

나는 정말 어떤 제안이 좋지 않은지 알지 못하므로 어떤 제안이 좋을 것입니다!

정말 감사합니다,

로렌스

~~~~ 코드 ~~~

- (void)layerSelected:(id)sender 
{ 
    int index = filterControl.selectedSegmentIndex; 

switch (index) 
{ 
    case 0: if (scroll == nil) 
      { 
       scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
       scroll.pagingEnabled = YES; 
       scroll.delaysContentTouches = NO; 
       scroll.userInteractionEnabled = YES; 
       NSInteger viewCount = 15; 
       for (int i = 0; i < viewCount; i++) 
       { 
        CGFloat yOrigin = i * self.view.frame.size.width; 
        UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
        [filterViewOverlay setImage:[filterManager objectAtIndex:i]]; 
        [scroll addSubview:filterViewOverlay]; 
        [filterViewOverlay release]; 
       } 
       scroll.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height); 
       [self.scroll setContentOffset:currentPos1]; 
       [self.view addSubview:scroll]; 
       [scroll release]; 
      } 
      else 
      { 
       //Set the position to the correct one 
      } 
    case 1: if (scroll1 == nil) 
      { 
       scroll1 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
       scroll1.pagingEnabled = YES; 
       scroll1.delaysContentTouches = NO; 
       scroll1.userInteractionEnabled = YES; 
       NSInteger viewCount = 15; 
       for (int i = 0; i < viewCount; i++) 
       { 
        CGFloat yOrigin = i * self.view.frame.size.width; 
        UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
        [filterViewOverlay setImage:[filterManager objectAtIndex:i]]; 
        [scroll1 addSubview:filterViewOverlay]; 
        [filterViewOverlay release]; 
       } 
       scroll1.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height); 
       [self.scroll1 setContentOffset:currentPos2]; 
       [self.view addSubview:scroll1]; 
       [scroll1 release]; 
      } 
      else 
      { 
       //Set the position to the correct one 
      } 
    case 2: if (scroll2 == nil) 
      { 
       scroll2 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
       scroll2.pagingEnabled = YES; 
       scroll2.delaysContentTouches = NO; 
       scroll2.userInteractionEnabled = YES; 
       NSInteger viewCount = 15; 
       for (int i = 0; i < viewCount; i++) 
       { 
        CGFloat yOrigin = i * self.view.frame.size.width; 
        UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
        [filterViewOverlay setImage:[filterManager objectAtIndex:i]]; 
        [scroll2 addSubview:filterViewOverlay]; 
        [filterViewOverlay release]; 
       } 
       scroll2.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height); 
       [self.scroll2 setContentOffset:currentPos3]; 
       [self.view addSubview:scroll2]; 
       [scroll2 release]; 
      } 
      else 
      { 
       //Set the position to the correct one 
      } 
    case 3: if (scroll3 == nil) 
      { 
       scroll3 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
       scroll3.pagingEnabled = YES; 
       scroll3.delaysContentTouches = NO; 
       scroll3.userInteractionEnabled = YES; 
       NSInteger viewCount = 15; 
       for (int i = 0; i < viewCount; i++) 
       { 
        CGFloat yOrigin = i * self.view.frame.size.width; 
        UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
        [filterViewOverlay setImage:[filterManager objectAtIndex:i]]; 
        [scroll3 addSubview:filterViewOverlay]; 
        [filterViewOverlay release]; 
       } 
       scroll3.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height); 
       [self.scroll3 setContentOffset:currentPos4]; 
       [self.view addSubview:scroll3]; 
       [scroll3 release]; 
      } 
      else 
      { 
       //Set the position to the correct one 

      } 
    case 4: if (scroll4 == nil) 
      { 
       scroll4 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
       scroll4.pagingEnabled = YES; 
       scroll4.delaysContentTouches = NO; 
       scroll4.userInteractionEnabled = YES; 
       NSInteger viewCount = 15; 
       for (int i = 0; i < viewCount; i++) 
       { 
        CGFloat yOrigin = i * self.view.frame.size.width; 
        UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
        [filterViewOverlay setImage:[filterManager objectAtIndex:i]]; 
        [scroll4 addSubview:filterViewOverlay]; 
        [filterViewOverlay release]; 
       } 
       scroll4.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height); 
       [self.scroll4 setContentOffset:currentPos5]; 
       [self.view addSubview:scroll4]; 
       [scroll4 release]; 
      } 
      else 
      { 
       //Set the position to the correct one 

      } 
    case 5: if (scroll5 == nil) 
      { 
       scroll5 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
       scroll5.pagingEnabled = YES; 
       scroll5.delaysContentTouches = NO; 
       scroll5.userInteractionEnabled = YES; 
       NSInteger viewCount = 15; 
       for (int i = 0; i < viewCount; i++) 
       { 
        CGFloat yOrigin = i * self.view.frame.size.width; 
        UIImageView *filterViewOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
        [filterViewOverlay setImage:[filterManager objectAtIndex:i]]; 
        [scroll5 addSubview:filterViewOverlay]; 
        [filterViewOverlay release]; 
       } 
       scroll5.contentSize = CGSizeMake(self.view.frame.size.width * viewCount, self.view.frame.size.height); 
       [self.scroll5 setContentOffset:currentPos6]; 
       [self.view addSubview:scroll5]; 
       [scroll5 release]; 
      } 
      else 
      { 
       //Set the position to the correct one 
      } 
} 
} 

답변

0

다음 당신은 휴식 문을 놓쳤다. 스위치는 각 case 문 끝에 break 문이 필요합니다. 그렇지 않으면 대소 문자 값에 관계없이 첫 번째 일치 실패 이후에 모든 코드를 실행합니다. 즉.

switch (soemthing) { 
    case 1: // do something 
     break; 
    case 2: // do something else 
     break; 
    default: 
} 

예상대로 작동합니다. 휴식 시간을 버리면 케이스 1은 그 아래의 모든 코드를 실행합니다.