2014-04-01 35 views
2

在单个视图iPhone应用程序中,我有以下结构:scrollView -> contentView -> imageView和底下(在主视图中)有7个可拖动的自定义视图 - 可以从/拖到contenView处理触动从主视角开始 - 如何查看触摸的子视图?

最初拖动是在自定义视图中处理的(请参阅[email protected]),虽然此功能运行良好,但需要将通知发送到主视图。

因此,我试图将touchesBegan和朋友移至主应用视图(请参阅​​3210)。

我的问题是:

最初我在contentView(见GameBoard.m)有这个代码,以使子视图在scrollView拖:从

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

    return result == self ? nil : result; 
} 

但是试图拖动互动时回contentView到主视图(在下面的屏幕截图所示的方向),这不会提供touchesBegan到主视图。

app screenshot

所以我已经改变了这个方法返回主视图,而不是砖:

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

    return result == self ? nil : self.window.rootViewController.view; 
} 

现在touchesBegan被称为主视图(如我可以在调试器中看到的),但touches.view也指向主视图。

我的问题是:

如何找到新touchesBegan方法接触的瓦片?

回答

2

没关系,我解决了我的问题。

ViewController.m我添加了一个_draggedTile伊娃并通过以下方法来查找接触的瓦片设置在touchesBegan

- (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; 
} 

而且在touchedMovedtouchesEndedtouchesCancelled我只是用那些伊娃(最初我也在那里使用上述findTileAtPoint:withEvent:方法,但有时触摸不会完全在拖动的瓷砖上,并且运动不稳定或取消)。