UITouch对象行为奇怪

时间:2010-05-13 13:06:43

标签: iphone

我想获得用户在屏幕上触摸的点数,因此我编写了以下代码,当用户触摸屏幕上的某个地方时会触发该代码

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    UITouch *touch = [[UITouch alloc] init]; 
    touch = [touches anyObject];
    CGPoint point = [touch locationInView:self];
    if (CGRectContainsPoint([dob frame], point)) {
        [self showDatePickerforDOB:YES];
    }
}

但是这段代码给出了运行时错误。在调试时,发现locationInView不被识别为触摸对象的功能,另一方面,它在iphone类参考文档中有记录。当我改变代码以排除分配,即 UITouch *触摸; touch = [触及anyObject]; 然后locationInView完美地工作。任何想法为什么UITouch * touch = [[UITouch alloc] init];给运行时错误。

2 个答案:

答案 0 :(得分:1)

我认为你不应该分配和初始化触摸指针,正确的代码应该是:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];

    UITouch *touch = [touches anyObject];
    CGPoint point  = [touch locationInView:self];

    if (CGRectContainsPoint([dob frame], point)) {
        [self showDatePickerforDOB:YES];
    }
}

[touches anyObject]将返回一个autorelease对象,因此您不需要分配和初始化触摸指针。

答案 1 :(得分:1)

我得到了错误的原因。这是因为行

CGPoint point = [touch locationInView:self];

当我将其更改为CGPoint point = [touch locationInView:self.view];时,运行时错误已被删除。原因是locationInView函数将UIView作为其参数,另一方面我给它一个委托,即'self'。

所以self.view解决了这个问题