2

我在网上搜索了很多,但没有找到任何具体的东西。我想这不是一个很大的问题,但我无法弄清楚。

我正在处理 UIImageView“A”,然后添加一些其他 UIImageViews 作为该“A ImageView”的子视图。为所有子视图启用了 UserInteraction。现在在 TouchBegan 方法中,我得到“A ImageView”的子视图数组并将其与 Touch.view 进行比较。但 touch.view 始终等于父视图,即“A ImageView”,并且永远不会返回触摸的子视图。

所以请指导我如何检测触摸了哪个子视图,然后我将通过更新其中心将该子视图移动到新位置。

提前感谢大家,期待您的回复。

问候,

4

2 回答 2

0

是否启用了子视图的交互,如果是,您是否尝试为您动态添加的每个主要视图和子视图提供单独的标签,并通过查看它们的标签来验证触摸...

于 2012-05-07T13:36:20.590 回答
0

恐怕用 imageview 作为按钮是错误的,但如果你坚持这样做,试试这些:

您可以通过子类化 imageview 来重写 hitTest 方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView *hittedView = [super hitTest: point withEvent: event];
    NSLog (@"self=<%p>, hitted=<%p>", self, hittedView);
    return hittedView;
}

添加日志以查看默认的 hitTest 是否返回正确的子视图。

如果没有,恐怕您必须自己编写 hitTest 代码:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{
    for (UIView *view in self.subviews) {
        if (CGRectContainsPoint(view.frame, point)) {
           return view;
        }
    }
    return self
}

本文档对您很有用:http: //developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html

于 2012-05-08T08:57:44.170 回答