帮助 - 在UIScrollView中缩放CAShapeLayer(即路径)

时间:2011-08-08 20:40:29

标签: path uiscrollview uiimageview scale cashapelayer

我遇到了问题,希望你能帮助我。这是适用于iPad的。

我有一个UIScrollView,UIImageView,CAShapeLayer和一个CGMutablePathRef。

1-所以,我在UIImageView中加载了一个Image

2-然后,我解析了文件中的所有路径,然后将它们添加到CAShapeLayer,即每个CAShapeLayer都是路径。

3-然后我将所有CAShapeLayer添加到UIImageView.layer

4-我做了第3步,所以我可以使用下面的函数返回保存图像和路径的视图。这有助于缩放路径和图像。

- (UIView *)viewForZoomingInScrollView: (UIScrollView *)scrollView 
{
    return myUIImageView;
}

5-然后我将UIImageView添加到UIScrollView。

6-然后我将UIScrollView子类化,以便我可以获得touchesBegan等。

*注意:当我通过使用CGPathContainsPoint(aLayer.path,& transf,touchPoint,NO)点击它们时,所有触摸事件(例如touchesBegan)都能够检测到所有路径。此外,我也可以在缩放后滚动视图,并且工作正常。

*现在的问题是:

  • 每当我放大/缩小时,CAShapeLayer都会得到很好的缩放,但似乎(路径的原始坐标)没有缩放,或者至少这是我所相信的。我是这样说的,因为当我点击CAShapeLayer时,他们没有回应,但是当我点击他们原来的地方或接近CAShapeLayer所示的地方时,我得到了CAShapeLayer的响应。

  • 我试图将所有CAShapeLayer放入一个数组中,从视图中删除它们,然后重新添加它们,但没有改变任何东西。我尝试了其他的东西,例如尝试单独扩展CAShapeLayer,将CAShapeLayer添加到UIScrollView而不是UIImageView。然后我获得当前应用的比例并将其应用于所有CAShapeLayer,但这并没有产生良好的结果。

- 检查附带的屏幕截图。我希望他们有所帮助。

我希望你能提前帮助我。

*缩放图像之前: http://imageshack.us/photo/my-images/193/beforescaling.jpg/

*缩放图片后: http://imageshack.us/photo/my-images/818/afterscaling.jpg/

**编辑:

- 潜在解决方案:

1-可能需要更新CAShapeLayer的CATransform3DIdentity。但是,我不知道该怎么做。

2-可能我需要使用CATransform3DTranslate,但我还不知道如何使用它。

1 个答案:

答案 0 :(得分:2)

我想在我终于发现之后我会回答它。对于那些可能像我一样陷入困境的人,只需这样做。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{
    for (UITouch *touch in touches) 

    {
          // The [self.view.subviews objectAtIndex:0]] is the view that I want to check whether the CAShapedLayer is touched or not.
          CGPoint touchPoint = [self.view convertPoint:[touch locationInView:self.view] toView:[self.view.subviews objectAtIndex:0]];
    }

}

更多详情:

当滚动视图缩放视图时,它不会更改该视图的内部坐标系,只会更改其外部坐标系。由于在图像视图的内部坐标系中对CAShapeLayer进行了测试,因此在进行命中测试之前,应将触摸点转换为该视图的坐标系。