Question

Je veux faire le geste de glisser pour faire glisser le UIView en continu et obtenir les données. Considérez chaque mot dans chaque UIView. I Les données stockées dans un tableau et imprimé dans l'étiquette de UIView pendant la transition. Mais lorsque je tente de glisser après montré tous Tracez votre programme de données a cessé de fonctionner. Mon projet montrant aucune erreur. S'il vous plaît me aider.

Ceci est mon tableau:

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];

Ceci est mon geste de reconnaissance de codage:

-(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];
            }
        }
    }
}

Il y a un problème en augmentation seulement. Je suis arrivé impression NSLog comme FAIL. Mais je ne comment arrêter geste si elle atteint reconnaisseur la valeur [addArray count].

Était-ce utile?

La solution

Je recommande incrémenter ou décrémenter votre valeur d'index (qui vous avez appelé incrément) avant la vérification de la validité, et si elle n'est pas valide revenir sur votre choix dans un autre. Comme ceci:

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.
    }
}

Et de même pour l'autre sens.

EDIT: Pour clarifier les choses, le problème d'origine est que vous vérifiez pour vous assurer que votre index est valide, mais, par incrémenter après la vérification que vous finissez par faire invalide. En utilisant votre exemple, lorsque l'incrément est 3 (indice le plus élevé de votre tableau), il est en fait moins que le nombre de tableau, ce qui est 4. Vous pouvez alors incrémenter votre index 4, qui serait hors des limites, ou, dans votre cas, tomber dans cette instruction if (qui ne sera plus nécessaire en utilisant la suggestion) et connectez votre FAIL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top