在一个ViewController中工作,它有几个视图作为子视图添加到它,我有一个touchesBegan方法:
UIImageView *testImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];
testImage.frame = CGRectMake(0, 0, 480, 280);
[self.view addSubview:testImage];
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint point;
UITouch *touch = [touches anyObject];
point.x = [touch locationInView:self.view].x;
point.y = [touch locationInView:self.view].y;
if ( point.y >= 280 && point.y <= 320 )
{
if ( point.x >= 0 && point.x <= 160 )
{
[self menu1];
}
if ( point.x >= 161 && point.x <= 320 )
{
[self menu2];
}
if ( point.x >= 321 && point.x <= 480 )
{
[self menu3];
}
}
}
我的问题是如何通过该方法辨别哪个视图被点击了?我一直在使用这些屏幕坐标,但如果我也在运行时移动这些视图,那么这将无效。
有没有办法查看在触摸或事件或上面的代码中点击了哪个视图:
UITouch *touch = [touches anyObject];
任何帮助赞赏//:)
答案 0 :(得分:3)
[touch view]
将为您提供最初发生触摸的视图(即,即使用户在触摸期间将手指移离视图,此视图也将保持不变)。
如果这不是您需要的行为,请使用:
[self.view hitTest:[touch locationInView:self.view] withEvent:event];
答案 1 :(得分:3)
假设您有一个带有这些ivars的视图控制器(连接到Interface Builder中的控件)
IBOutlet UILabel *label;
IBOutlet UIImageView *image;
要判断触摸是否触及这些项目或背景,请将此方法添加到视图控制器。
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
{
UITouch *touch = [[event allTouches] anyObject];
if ([touch view] == label) {
NSLog(@"touched the label");
}
if ([touch view] == image) {
NSLog(@"touched the image");
}
if ([touch view] == self.view) {
NSLog(@"touched the background");
}
}
要响应触摸的任何UIView子类(如UIView,UILabel或UIImageView)必须将 .userInteractionEnabled 属性设置为YES。
答案 2 :(得分:1)
我可能会遗漏一些东西,但是你的“menuX”元素不会有自己的描述它们的大小和位置吗?然后你要做的就是询问这个点是否在那些矩形内。
答案 3 :(得分:1)
为什么要实施自己的热门测试?只需将透明按钮放在任何你想要的地方,这是微不足道的。