2011-02-07 9 views
0

私は、パンとピンチジェスチャーをビューに添付しました。私はそれらが "UIGestureRecognizerStateChanged"状態の各1つのサイクルを完了したときに、それぞれから更新された情報を集約する調整されたアクションをとるように調整したいと思います。具体的には、私のパンは翻訳を制御し、ピンチコントロールはスケールを制御します。私は、翻訳とスケールの両方を1つの場所でインクリメンタルマトリックス連結したいのではなく、それぞれを自律的に連結して、不快な階段状の動きを起こさせたいと思います。2つのUIGestureRecognizerの動作をどのように調整できますか?

私はUIGestureRecognizerDelegateドキュメントを見つめましたが、私が望むことをする方法はありません。

おかげで、
ダグ

答えて

0

認識装置が「同時に」作業していることを確認作ってみてください最初にすること。デリゲートでは、次のように定義します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{   
    return (gestureRecognizer.view == otherGestureRecognizer.view); 
} 

私の経験では、十分にスムーズな操作を行うには十分です。しかし、そうでない場合、私は、レコグナイザの1つからトランスフォームを更新し、プロパティからステートを別のステートに保存するだけです。たとえば、CGFloatというプロパティをcachedScaleという名前で宣言したとしましょう。このプロパティは、初期設定で1.0に設定されています。次に、あなたのピンチとパンのハンドラでは、次の操作を行いたい:あなただけの周りのビューをドラッグしようとしている場合

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer 
{  
    self.cachedScale *= recognizer.scale; 
} 

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer 
{ 
    CGAffineTransform transform = CGAffineTransformMakeScale(self.cachedScale, self.cachedScale); 
    self.cachedScale = 1.0; 

    CGPoint translation = [recognizer translationInView:recognizer.view.superview]; 
    CGAffineTransformTranslate(transform, translation.x, translation.y); 

    // do something with your transform 
} 

、あなたはより多くの幸運は、ビューの中心部を変更するのではなく、そのへの変換を適用している可能性が変換する。

関連する問題