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 对象

编辑: * - 上面的答案是错误的。感谢 Jacky 指出我—— *

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 回答