Сбой iPhone Swipe Gesture - PullRequest
       4

Сбой iPhone Swipe Gesture

0 голосов
/ 21 февраля 2011

У меня есть приложение, которое я бы хотел, чтобы жест смахивания переворачивал на второй вид.Приложение все настроено с кнопками, которые работают.Хотя жест смахивания вызывает сбой («EXC_BAD_ACCESS».).

Код жеста:

- (void)handleSwipe:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"%s", __FUNCTION__);
    switch (recognizer.direction)
    {
        case (UISwipeGestureRecognizerDirectionRight):
            [self performSelector:@selector(flipper:)];
            break;

        case (UISwipeGestureRecognizerDirectionLeft): 
            [self performSelector:@selector(flipper:)];
            break;

        default:
            break;
    }   
}

and "flipper" looks like this:


- (IBAction)flipper:(id)sender {
    FlashCardsAppDelegate *mainDelegate = (FlashCardsAppDelegate *)[[UIApplication sharedApplication] delegate];
    [mainDelegate flipToFront];
}

flipToBack (и flipToFront) выглядят следующим образом ..

- (void)flipToBack {
     NSLog(@"%s", __FUNCTION__);

    BackViewController *theBackView = [[BackViewController alloc] initWithNibName:@"BackView" bundle:nil];
    [self setBackViewController:theBackView];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES];
    [frontViewController.view removeFromSuperview];
    [self.window addSubview:[backViewController view]];
    [UIView commitAnimations];
    [frontViewController release];
    frontViewController = nil;
    [theBackView release];
    //  NSLog (@" FINISHED ");
}

Может быть, я поступаю неправильно ... Все идеи приветствуются ...

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

Почему вы даже используете performSelector: Тот факт, что метод помечен как (IBAction), не отличает его от любого другого метода, и вы можете отправлять их в виде сообщений в экземпляр класса

- (void)handleSwipe:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"%s", __FUNCTION__);
    if ((recognizer.direction == UISwipeGestureRecognizerDirectionRight) || (recognizer.direction == UISwipeGestureRecognizerDirectionLeft)) {
        [self flipper:nil]
    }
}

На самом деле, поскольку направления жестов являются просто битовыми флагами, это можно записать как:

- (void)handleSwipe:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"%s", __FUNCTION__);
    if (recognizer.direction & (UISwipeGestureRecognizerDirectionRight | UISwipeGestureRecognizerDirectionLeft)) {
        [self flipper:nil]
    }
}
2 голосов
/ 21 февраля 2011

Ваш селектор должен принимать аргумент, как подразумевается символом : в имени, поэтому вы должны использовать performSelector:withObject:.

[self performSelector:@selector(flipper:) withObject:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...