locationOfTouch导致SIGABRT

时间:2011-12-10 13:49:09

标签: ios cocoa-touch uikit uigesturerecognizer

我正在试图弄清楚当我使用locationOfTouch时出现错误的原因:inView。最后我只使用locationOfTouch调用创建了一个新视图,每当我触摸视图时我仍然会得到一个SIGABRT。

除了import语句之外,这里是我视图中的所有代码:

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

@end

这是impl:

@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使用SIGABRT指向main.m.点击“继续”会显示“EXC_BAD_INSTRUCTION”。 http://imageshack.us/photo/my-images/849/consolel.png/

上提供的屏幕截图

1 个答案:

答案 0 :(得分:8)

这会崩溃,因为它假定存在触摸零。你需要先确认一个,如下:

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

将“locationOfTouch:”部分视为“touchAtIndex:”,如果触摸数组为空(当您抬起手指或将其移出屏幕时),则没有{{ 1}}。