CGRectIntersectsRect未检测到相交的视图

时间:2013-12-20 06:42:04

标签: objective-c uiview uiscrollview

我有两个滚动视图,一个在左边,另一个在右边。

在左侧滚动视图中,我已经在其上放置了带有标签的uiviews列表,用于命名它们。

在右侧滚动视图中,我已经放置了滚动视图列表,在每个滚动视图中,我已经放置了带有标签的uiviews列表,用于命名它们。

我正在使用CGRectIntersectsRect来检测左侧滚动视图中的uiview与使用拖放的右侧滚动视图中的任何uiview的交集。

我的问题是CGRectIntersectsRect没有检测到相交的视图。

我正在使用uinavigationcontroller。

我使用过google搜索获得的OBDragDropTest项目。因为我正在做出改变。

我的代码如下,

-(void) handleDropAnimationForOvum:(OBOvum*)ovum withDragView:(UIView*)dragView dragDropManager:(OBDragDropManager*)dragDropManager
{
  UIView *itemView = nil;


  if ([ovum.dataObject isKindOfClass:[NSNumber class]])
  {

       itemView = [self.view viewWithTag:[ovum.dataObject integerValue]];



      [viewsAry removeAllObjects];

      [viewsAry addObjectsFromArray:unAssignedViewContents];

      [viewsAry addObjectsFromArray:removeViewContents];

      [viewsAry addObjectsFromArray:repairViewContents];

      [viewsAry addObjectsFromArray:paintViewContents];

      [viewsAry addObjectsFromArray:refitViewContents];

      [viewsAry addObjectsFromArray:detailViewContents];

      [viewsAry addObjectsFromArray:completedViewContents];


      NSArray *subViewsInView=[NSArray arrayWithArray:viewsAry];






      for(UIView *theView in subViewsInView)
      {

          if (![itemView isEqual:theView])
          {

              if(CGRectIntersectsRect(theView.frame, ovum.dragView.frame))
              {
                  NSLog(@"view Tag  =  %d",theView.tag);
              }

          }

      }



  }

我为所有视图和滚动视图设置了setUserInteractionEnabled = True。

请为此问题提供解决方案。

1 个答案:

答案 0 :(得分:1)

而不是下面的代码

if (![itemView isEqual:theView])
{
    if(CGRectIntersectsRect(theView.frame, ovum.dragView.frame))
    {
         NSLog(@"view Tag  =  %d",theView.tag);
    }
}

我用过

if (![itemView isEqual:theView])
{
    CGPoint point = [theView convertPoint:dragView.center fromView:dragView.superview];
    if([theView pointInside:point withEvent:nil])
    {
        NSLog(@"view Tag  =  %d",theView.tag);
    }
}

并完成子视图的交集检测。现在我可以获得接收器的标签号。