0

誰でも言うことができますか、UIPangestureマウスをドラッグして離すときにドラッグ可能なラベルを使用して、タッチポイントを見つけています

CGPoint touchPoint = [panGesture locationInView:self.view];

今、私はこのラベルがドラッグされているラベルを確認したい.このために私はこのコードを使用しています

for(UILabel *labelView in self.view.subviews){
    if ([labelView isMemberOfClass:[UILabel class]]) {

        NSLog(@"%@",NSStringFromCGPoint(touchPoint ));

        NSLog(@"%@",NSStringFromCGRect(labelView.layer.frame));

        if([labelView.layer containsPoint:touchPoint]){

            int i=[[labelView.subviews objectAtIndex:0] tag];

            NSLog(@">>>> %d",i);
        }
    }
}
4

2 に答える 2

2

ジェスチャ ハンドラー メソッドに渡される panGesture には、レコグナイザーでセットアップした UILabel オブジェクトを指すプロパティ 'view' があります。

編集: * -- 上記の回答は間違っていました。ジャッキー、指摘してくれてありがとう -- *

self.view の hitTest:withEvent: メソッドは、その時点でのビューを返します。nil を withEvent に渡します。

self.view に UILabel 以外のサブビューもあり、返されたサブビューのいずれかを避けたい場合は、呼び出します

bool CGRectContainsPoint (
   CGRect rect,
   CGPoint point
);

ラベルごとに。四角形はパス フレーム、点はタッチポイント

for(UILabel *labelView in self.view.subviews){
    if ([labelView isMemberOfClass:[UILabel class]]) {
        if(CGRectContainsPoint(labelView.frame,touchPoint)){
            int i=[[labelView.subviews objectAtIndex:0] tag];
            NSLog(@">>>> %d",i);
        }
    }
}

編集: .layer の containsPoint: が機能しなかった理由:

thePoint 受信者の座標系のポイント。

コードでは、 touchPoint は、ラベルの座標系とは異なる self.view の座標系にあります

于 2012-10-18T11:05:55.320 に答える
0

返信ありがとうございます。これは私のために働いた

if ([labelView.layer containsPoint:[labelView.layer convertPoint:touchPoint fromLayer:labelView.layer.superlayer]] == TRUE)

しかし、あなたの答えも正しいです。

于 2012-10-18T15:19:02.960 に答える