如何检测以编程方式触摸的子视图

时间:2012-05-07 08:27:11

标签: uiimageview subview uitouch uitapgesturerecognizer uiresponder

我在网上搜索了很多但是却找不到具体的东西。我想这不是一个很大的问题,但我无法弄明白。

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

因此,请指导我如何检测触摸的子视图,然后我将通过更新其中心将该子视图移动到新位置。

提前感谢所有人并期待您的回复。

此致

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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