0

サブビューとして追加されたいくつかのビューがある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];

助けていただければ幸いです//:)

4

4 に答える 4

3

[touch view]タッチが最初に発生したビューが表示されます (つまり、タッチ中にユーザーがビューから指を離しても、このビューは同じままです)。

それが必要な動作でない場合は、次を使用します。

[self.view hitTest:[touch locationInView:self.view] withEvent:event];
于 2009-11-15T02:57:47.797 に答える
3

これらのivarを備えたView Controllerがあるとします(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、UILabel、UIImageView などの UIView サブクラスでは、.userInteractionEnabledプロパティを YES に設定する必要があります。

于 2009-11-15T16:20:10.453 に答える
1

何かが足りないかもしれませんが、「menuX」要素には、サイズと場所を説明する独自の四角形がありませんか?次に、ポイントがそれらの長方形内にあるかどうかを尋ねるだけです。

于 2009-11-15T02:36:36.833 に答える
1

なぜ独自のヒット テストを実装しているのですか? 透明なボタンを好きな場所に配置するのは簡単です。

于 2009-11-15T08:10:50.563 に答える