2011-08-08 7 views
4

私には問題があります。これはiPadのためのものです。Help - UIScrollViewのCAShapeLayer(つまりパス)のスケーリング

私はUIScrollView、UIImageView、CAShapeLayer、およびCGMutablePathRefを持っています。

1-だから、私はその後、ファイルからのすべてのパスを解析された各CAShapeLayerパス、すなわちCAShapeLayer(S)に追加し、次にUIImageView

2-の画像をロードしました。

3-そして私は私は画像とパスを保持するビューを返すために以下の関数を使用することができ、ステップ3を行ったUIImageView.layerに

4-すべてCAShapeLayer(複数可)を加えました。これは、パスと画像を一緒に拡大縮小するのに役立ちます。

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

5次に、UIImageViewをUIScrollViewに追加しました。

5,6は、その後、私は...私はtouchesBeganなどを得ることができUIScrollViewのをサブクラス化

*注:このようtouchesBeganなどのすべての私のタッチイベントは、私がCGPathContainsPointを使って、それらをクリックすると、すべてのパスを検出することができます( aLayer.path、& transf、touchPoint、NO)。また、ズーム後もビュー内をスクロールすることができ、うまく動作します。 、私がズームイン/アウトするたびに、CAShapeLayer(複数可)細かいスケールます

  • が、スケールされません(パスの元の座標)ようだ:

    *さて問題です少なくともそれは私が信じているものです。私はこれを言っているのですが、CAShapeLayerをクリックすると応答しませんが、元の場所をクリックするか、CAShapeLayerが表示されている場所の近くをクリックすると、CAShapeLayerが応答します。

  • すべてのCAShapeLayerを配列に取得し、ビューから消去してもう一度追加しようとしましたが、何も変更されませんでした。私は、CAShapeLayerをUIImageViewの代わりにUIScrollViewに追加することによって、CAShapeLayerを別々に拡張しようとするなど、他のものも試しました。それから、現在適用されているスケールを取得し、それをすべてのCAShapeLayerに適用しますが、それは良い結果をもたらしませんでした。

-添付のスクリーンショットを確認してください。彼らが助けてくれることを願っています

おかげさまでお手伝いしていただければ幸いです。画像をスケーリングする前に

*:イメージをスケーリングした後 http://imageshack.us/photo/my-images/193/beforescaling.jpg/

*: http://imageshack.us/photo/my-images/818/afterscaling.jpg/

**編集:

- 電位ソリューション:

1-それは私が必要とするかもしれませんCAShapeLayerのCATransform3DIdentityを更新します。しかし、私はまだそれを行う方法を知らない。

2私はCATransform3DTranslateを使用する必要があるかもしれませんが、私はまだそれをどのように使用するのか分かりません。

+0

こんにちは@NewUser_同じ問題に直面しているこのimの解決策を見つけましたか...この問題を掘り起こすのを助けることができます –

+0

こんにちは、パスをスケーリングしていたとき、解決策も適切でしたか?私がズームインすると、パスの解像度が失われてしまい、ズーム付きのバーチャルを描こうとしています – anoop4real

答えて

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をヒットテストするので、ヒットテストを行う前にタッチポイントをそのビューの座標系に変換する必要があります。