2012-01-10 4 views
2

스 와이프 제스처를 수행하여 UIView을 계속 슬라이드하고 데이터를 가져오고 싶습니다. 각각 UIView의 각 단어를 고려하십시오. 전 데이터를 배열에 저장하고 전환 중에 UIView 레이블에 인쇄했습니다. 그러나 표시 한 후 슬쩍하려고하면 모든 데이터 프로그램이 작동을 멈 춥니 다. 오류가없는 프로젝트. 제발 도와주세요.스 와이프 제스처로 UIViews 이동

이 내 배열 :

addArray = [[NSMutableArray alloc]initWithCapacity:4]; 
[addArray insertObject:@"10" atIndex:0]; 
[addArray insertObject:@"20" atIndex:1]; 
[addArray insertObject:@"30" atIndex:2]; 
[addArray insertObject:@"40" atIndex:3]; 

flippedArray = [[NSMutableArray alloc] initWithCapacity:4]; 
[flippedArray insertObject:@"100" atIndex:0]; 
[flippedArray insertObject:@"200" atIndex:1]; 
[flippedArray insertObject:@"300" atIndex:2]; 
[flippedArray insertObject:@"400" atIndex:3]; 

이 내 제스처 인식기 코딩입니다 :

-(void)swipegesture:(UISwipeGestureRecognizer *)recognizer{ 

    CGPoint location = [recognizer locationInView:additionalView]; 
    if (recognizer.direction==UISwipeGestureRecognizerDirectionLeft) 
    { 
     if (increment<[addArray count]) 
     { 
      NSLog(@"%d",[addArray count]); 
      increment++; 
      if(increment==[addArray count]) 
      { 
       NSLog(@"Fail"); 
       //[recognizer requireGestureRecognizerToFail:swipeGesture]; 
       [recognizer setEnabled:NO]; 
      } 
      else 
      { 
       additionalLabel.text=[[NSString alloc] initWithFormat:@"%@", 
             [addArray objectAtIndex:increment]]; 
       flippedLabel.text = [[NSString alloc] initWithFormat:@"%@", 
             [flippedArray objectAtIndex:increment]]; 
       NSLog(@"increment %d",increment); 
       [UIView animateWithDuration:0.55 animations:^{ 
        [UIView setAnimationDelay:0.2]; 
       }]; 
       CATransition *animation = [CATransition animation]; 
       [animation setType:kCATransitionPush]; 
       [animation setSubtype:kCATransitionFromRight]; 
       [animation setTimingFunction:[CAMediaTimingFunction 
           functionWithName:kCAMediaTimingFunctionDefault]]; 
       [animation setSpeed:0.4]; 
       [[additionalView layer] addAnimation:animation forKey:nil]; 
      } 
     } 
    } 
    else if(recognizer.direction==UISwipeGestureRecognizerDirectionRight) 
    { 
     if (increment>=0 && increment<[addArray count]) 
     { 
      increment--; 
      if(increment>[addArray count]) 
      { 
       additionalLabel.text=[[NSString alloc]initWithFormat:@"%@", 
             [addArray objectAtIndex:increment]]; 
       flippedLabel.text=[[NSString alloc]initWithFormat:@"%@", 
             [flippedArray objectAtIndex:increment]]; 
       NSLog(@"Decrement %d",increment); 
       [UIView animateWithDuration:0.55 animations:^{ 
        [UIView setAnimationDelay:0.2]; 
       }]; 
       CATransition *animation = [CATransition animation]; 
       [animation setType:kCATransitionPush]; 
       [animation setSubtype:kCATransitionFromLeft]; 
       [animation setTimingFunction:[CAMediaTimingFunction 
           functionWithName:kCAMediaTimingFunctionDefault]]; 
       [animation setSpeed:0.4]; 
       [[additionalView layer] addAnimation:animation forKey:nil]; 
      } 
     } 
    } 
} 

문제가 증가하면서에만 있습니다. FAIL로 인쇄 된 NSLog이 있습니다. 그러나 제스처 인식기가 [addArray count]이라는 값에 도달하면 제스처 인식기를 중지하는 방법을 모르겠습니다.

답변

3

유효성 검사 전에 색인 값 (증가분 이름)을 증가 시키거나 감소시키고, 유효하지 않은 경우 다른 방법으로 전환을 권장합니다. 좋아요 :

if (recognizer.direction==UISwipeGestureRecognizerDirectionLeft) 
{ 
    increment++; 

    if (increment<[addArray count]) 
    { 
     // Your code 
    } 
    else 
    { 
     increment--; // The increment would pass the range of the array, set it back. 
    } 
} 

마찬가지로 다른 방향입니다.

편집 : 원래의 문제점은 색인이 유효한지 확인하는 것이지만 수표 이후에 증가시킴으로써 색인이 유효하지 않게 만드는 것입니다. 예제를 사용하면 증가 값이 3 (배열의 가장 높은 인덱스) 일 때 실제로 배열의 개수 인 4보다 적습니다. 그런 다음 인덱스를 범위 4가 아닌 범위로 증가 시키거나 범위 내에서 증가시킵니다 케이스, 해당 if 문에 빠지면 (제안을 사용하여 더 이상 필요하지 않음) FAIL을 기록하십시오.

+1

. if (increment [1] [addArray count]) – Lefteris

+0

정말 고마워요 ... 정말로 당신의 대답을 볼 수있어서 기분이 좋습니다 ... –

+0

그 작업 완벽 .. . –