我试图弄清楚为什么当我使用locationOfTouch:inView时出现错误。最终,我仅使用locationOfTouch调用创建了一个新 View ,并且每当触摸该 View 时,我仍然会得到一个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使用SIGABRT指向main.m。单击“继续”将得到“EXC_BAD_INSTRUCTION”。可以在http://imageshack.us/photo/my-images/849/consolel.png/上截图

最佳答案

因为它假定接触为零,所以会崩溃。您需要先确认有一个,如下所示:

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

可以将“locationOfTouch:”部分说成“touchAtIndex:”,如果触摸数组为空(当您松开手指或将其移离屏幕时),则没有touchAtIndex:0

10-08 05:47