由于重置了contentoffset,无法识别UIScrollView中嵌入的customview中的触摸

时间:2014-05-20 09:54:09

标签: ios uiscrollview contentoffset

我有一个UIScrollView,它包含一个自定义图纸视图。绘图视图用于绘制大内容(10000x10000像素)。由于我无法在scrollview [内存限制]中嵌入大量视图,因此我创建了一个自定义视图,其大小几乎是scrollView的两倍。我使用了StreetScroller [apple sample]逻辑来实现相同的功能。这很好但是识别触摸有问题。您可以从此处下载更新的示例https://github.com/praveencastelino/SampleApps/tree/master/StreetScroller

因为每当滚动视图的contentOffset移动了X个像素量时,它就被重置为中心位置'从它的中心。因此,scrollView内容偏移量与我们实际需要的不同。这就是我们在scrollView中所做的。

- (void)recenterIfNecessary
{
  CGPoint currentOffset = [self contentOffset];
  CGFloat contentHeight = [self contentSize].height;

  CGFloat contentWidth = [self contentSize].width;

  CGPoint centerOffset,distanceFromCenter;
  centerOffset.y = (contentHeight - [self bounds].size.height) / 2.0;
  distanceFromCenter.y  = fabs(currentOffset.y - centerOffset.y);

  centerOffset.x = (contentWidth - [self bounds].size.width) / 2.0;
  distanceFromCenter.x  = fabs(currentOffset.x - centerOffset.x);

  if (distanceFromCenter.y > (contentHeight / 6.0))
  {
    self.contentOffset = CGPointMake(currentOffset.x, centerOffset.y);
    [_labelContainerView didResetByVerticalDistancePoint:CGPointMake(currentOffset.x, centerOffset.y - currentOffset.y) visibleFrame:[self bounds]];
  }


  if (distanceFromCenter.x > (contentWidth / 6.0))
  {
    self.contentOffset = CGPointMake(centerOffset.x, currentOffset.y);
    [_labelContainerView didResetByHorizontalDistancePoint: CGPointMake(centerOffset.x - currentOffset.x, currentOffset.y) visibleFrame:[self bounds]];
  }

}

每当scrollview重置中心时,通知自定义视图并跟踪虚拟内容偏移。

-(void)didResetByVerticalDistancePoint:(CGPoint)distance visibleFrame:(CGRect)frame
 {
  _contentOffsetY += distance.y;
  NSLog(@"_contentOffsetY %f",_contentOffsetY);
  [self setNeedsDisplay];
 }

但是,我想在滚动视图滚动时计算虚拟内容偏移量[目前仅在我们将scrollview的内容偏移重置为中心时计算内容偏移量]。这最终会帮助我处理触摸。

另外,我需要一种方法来限制scrollview的边界无限滚动。我想只显示内容并避免滚动,如果用户试图进一步滚动它。

0 个答案:

没有答案