在我的一个iphone项目中,我有三个视图,您可以通过触摸和拖动来移动它们。但是,我想用两个手指阻止用户同时移动两个视图。因此,我试图尝试使用uiview.exclusivetouch,但没有成功。
为了理解这个属性是如何工作的,我创建了一个全新的项目,视图控制器中包含以下代码:
- (void)loadView {
self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
UIButton* a = [UIButton buttonWithType:UIButtonTypeInfoDark];
[a addTarget:self action:@selector(hej:) forControlEvents:UIControlEventTouchUpInside];
a.center = CGPointMake(50, 50);
a.multipleTouchEnabled = YES;
UIButton* b = [UIButton buttonWithType:UIButtonTypeInfoDark];
[b addTarget:self action:@selector(hej:) forControlEvents:UIControlEventTouchUpInside];
b.center = CGPointMake(200, 50);
b.multipleTouchEnabled = YES;
a.exclusiveTouch = YES;
[self.view addSubview:a];
[self.view addSubview:b];
}
- (void)hej:(id)sender
{
NSLog(@"hej: %@", sender);
}
运行此命令时,hej:在按下任何按钮时都会被调用,使用不同的发件人,即使其中一个按钮的exclusivetouch设置为yes。我试过评论那些多点触动的台词,但没有用。有人能给我解释一下我在这里遗漏了什么吗?
谢谢,
伊莱
最佳答案
从The iPhone OS Programming Guide:
将事件传递限制为单个视图:
默认情况下,视图的exclusivetouch属性设置为no。
属性为“是”,则标记视图,以便跟踪
触摸,这是唯一的看法,在窗口中,是跟踪触摸。
窗口中的其他视图无法接收这些触摸。但是,a
被标记为“独家触摸”的视图不接收触摸。
与同一窗口中的其他视图关联。如果一根手指
联系独家触摸视图,则只有在
该视图是该窗口中唯一跟踪手指的视图。如果
手指触摸非排他性视图,然后触摸只交付。
如果在独占触摸视图中没有其他手指跟踪。
它声明独占触摸属性不影响视图框架之外的触摸。
为了处理过去,我使用主视图来跟踪屏幕上的所有触摸,而不是让每个子视图轨迹触摸。最好的方法是:
if(CGRectContainsPoint(thesubviewIcareAbout.frame, theLocationOfTheTouch)){
//the subview has been touched, do what you want
}