13

在我的一个 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。我试过评论multipleTouchEnabled-lines,但无济于事。有人可以向我解释我在这里缺少什么吗?

谢谢, 伊莱

4

1 回答 1

18

来自iPhone OS 编程指南

将事件传递限制为单个视图:

默认情况下,视图的 ExclusiveTouch 属性设置为 NO。如果将该属性设置为 YES,则标记视图,以便在跟踪触摸时,它是窗口中唯一跟踪触摸的视图。窗口中的其他视图无法接收这些触摸。但是,标记为“独占触摸”的视图不会接收与同一窗口中的其他视图相关联的触摸。如果手指接触独占触摸视图,则仅当该视图是该窗口中跟踪手指的唯一视图时才传递该触摸。如果手指触摸非独占视图,则仅当独占触摸视图中没有另一个手指跟踪时才传递该触摸。

它声明独占触摸属性不会影响视图框架之外的触摸。

过去为了处理这个问题,我使用主视图来跟踪屏幕上的所有触摸,而不是让每个子视图跟踪触摸。最好的方法是:

if(CGRectContainsPoint(thesubviewIcareAbout.frame, theLocationOfTheTouch)){
    //the subview has been touched, do what you want
}
于 2009-05-14T07:18:20.717 回答