Проведите жестом, чтобы скользить UIViews - PullRequest
2 голосов
/ 10 января 2012

Я хочу сделать жест пальцем, чтобы скользить UIView непрерывно и получать данные из него.Рассмотрим каждое слово в каждом UIView.Я сохранил данные в массиве и напечатал в метке UIView во время перехода.Но когда я пытаюсь провести после показа, все данные программы перестают работать.Мой проект не показывает ошибок.Пожалуйста, помогите мне с этим.

Это мой массив:

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

Существует проблема только при увеличении.Я получил NSLog печать как FAIL.Но я не могу остановить распознавание жестов, если оно достигает значения [addArray count].

1 Ответ

3 голосов
/ 10 января 2012

Я бы порекомендовал увеличить или уменьшить значение вашего индекса (которое вы назвали приращением) перед проверкой достоверности, а если оно недопустимо, отмените ваше действие в другом. Вот так:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...