Результаты locationOfTouch в SIGABRT - PullRequest
5 голосов
/ 10 декабря 2011

Я пытаюсь выяснить, почему я получаю сообщение об ошибке при использовании locationOfTouch: inView. В конце концов я создал новый вид с помощью только вызова locationOfTouch, и я все еще получаю SIGABRT всякий раз, когда я касаюсь вида.

Помимо операторов импорта, вот весь код на мой взгляд:

@interface Dummy : UIView <UIGestureRecognizerDelegate> {
    UIPanGestureRecognizer *repositionRecognizer;
}

@end

Вот подсчет:

@implementation Dummy

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        repositionRecognizer = [[UIPanGestureRecognizer alloc] 
                 initWithTarget:self 
                         action:@selector(reposition:)];
        [repositionRecognizer setDelegate:self];
        [self addGestureRecognizer:repositionRecognizer];

        self.backgroundColor = [UIColor grayColor];
    }
    return self;
}

- (void)reposition:(UIGestureRecognizer *) gestureRecognizer {
    [gestureRecognizer locationOfTouch:0 inView:self];
    //[gestureRecognizer locationInView:self];
}

@end

Если я использую locationInView, все работает нормально. Если я использую locationOfTouch: inView, программа прерывается, как только заканчивается касание.

РЕДАКТИРОВАТЬ: На консоли, с этим классом, сообщения об ошибках не отображаются. IDE указывает на main.m с помощью SIGABRT. Нажатие на «Продолжить» приводит к «EXC_BAD_INSTRUCTION». Скриншот доступен на http://imageshack.us/photo/my-images/849/consolel.png/

1 Ответ

8 голосов
/ 10 декабря 2011

Это происходит сбой, поскольку предполагается, что имеется ноль касания.Вы должны подтвердить, что сначала есть один, например, так:

- (void)reposition:(UIGestureRecognizer *) gestureRecognizer {
    if (gestureRecognizer.numberOfTouches > 0){
        CGPoint point = [gestureRecognizer locationOfTouch:0 inView:self];
        NSLog(@"%@",NSStringFromCGPoint(point));
    }
}

Думайте о части "locationOfTouch:" как о "touchAtIndex:", если массив касаний пуст (когда вы поднимаетепальцем или сдвинь его с экрана) тогда нет touchAtIndex:0.

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