Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 处理触摸从主视图开始-如何获得触摸子视图?_Ios_Iphone_Uiscrollview_Hittest_Touchesbegan - Fatal编程技术网

Ios 处理触摸从主视图开始-如何获得触摸子视图?

Ios 处理触摸从主视图开始-如何获得触摸子视图?,ios,iphone,uiscrollview,hittest,touchesbegan,Ios,Iphone,Uiscrollview,Hittest,Touchesbegan,在单视图iPhone应用程序中,我有以下结构:scrollView->contentView->imageView,下面(在主视图中)有7个可拖动的自定义视图-可以从contenView拖动 最初,拖动是在自定义视图中处理的(请参见),虽然这很有效,但需要向主视图发送通知 因此,我尝试将触摸开始和好友移动到主应用程序视图(请参阅) 我的问题是: 最初,我在contentView(请参阅)中有此代码,以便在滚动视图中启用子视图拖动: - (UIView *)hitTest:(CGPoint)poi

在单视图iPhone应用程序中,我有以下结构:
scrollView->contentView->imageView
,下面(在主视图中)有7个可拖动的自定义视图-可以从
contenView
拖动

最初,拖动是在自定义视图中处理的(请参见),虽然这很有效,但需要向主视图发送通知

因此,我尝试将
触摸开始
和好友移动到主应用程序视图(请参阅)

我的问题是:

最初,我在
contentView
(请参阅)中有此代码,以便在
滚动视图中启用子视图拖动:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView* result = [super hitTest:point withEvent:event];

    return result == self ? nil : result;
}
但是,当尝试将互动程序从
contentView
拖回主视图时(按下面屏幕截图所示的方向),这不会将
touchsbegind
拖回主视图

因此,我更改了此方法以返回主视图而不是平铺:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView* result = [super hitTest:point withEvent:event];

    return result == self ? nil : self.window.rootViewController.view;
}
现在在主视图上调用了
touchesbreated
(我可以在调试器中看到),但是
touches.view
也指向主视图

我的问题是:


如何在新的
touchesbreated
方法中找到被触摸的磁贴?

不管怎样,我已经解决了我的问题

在中,我添加了一个
\u draggedTile
ivar,并使用以下方法在
touchsbegind
中设置它,以查找被触摸的互动程序:

- (SmallTile*) findTileAtPoint:(CGPoint)point withEvent:(UIEvent*)event
{
    NSArray* children = [self.view.subviews arrayByAddingObjectsFromArray:_contentView.subviews];

    for (UIView* child in children) {
        CGPoint localPoint = [child convertPoint:point fromView:self.view];

        if ([child isKindOfClass:[SmallTile class]] &&
            [child pointInside:localPoint withEvent:event]) {
            return (SmallTile*)child;
        }
    }

    return nil;
}
touchedMoved
toucheseEnd
touchesCancelled
中,我只使用了那个ivar(最初我使用的是上面的
findTileAtPoint:withEvent:
方法,但有时触摸不会完全覆盖到拖动的磁贴上,移动会突然或取消)