我想获得用户在屏幕上触摸的点数,因此我编写了以下代码,当用户触摸屏幕上的某个地方时会触发该代码
-(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];给运行时错误。
答案 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解决了这个问题