13

私のiPhoneプロジェクトの1つには、タッチしてドラッグすることで移動できる3つのビューがあります。ただし、2本の指を使用して、ユーザーが2つのビューを同時に移動できないようにします。そのため、UIView.exclusiveTouchを試してみましたが、成功しませんでした。

プロパティがどのように機能するかを理解するために、ViewControllerに次のコードを使用して新しいプロジェクトを作成しました。

- (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:が呼び出されます。ただし、ボタンの1つで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 に答える