2011-11-16 5 views
1

メインビューにはスクロールビューがあり、スクロールビューには3つのサブビューがあります。そして、私はすべての私のサブビューにUIButtonsを持っています。UIScrollViewでUIButtonsをドラッグしますか?

ここで、これらのボタンをあるサブビューから別のサブビューにドラッグしたいと思います(ボタンをドラッグしている間はスクロールビューはスクロールしません)。

どうすればよいですか?私はこのスニペットは、(UIScrollViewの内側のUicontrol)この特定のケースのために動作しますが、UIResponderチェーンの私の理解はこれが動作する場合、それは(

- (void)viewDidLoad { // or wherever you initialize your things 
    ... 
    // Add swipe event to UIButton so it will capture swipe intents 
    UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] init]; 
    [panGR addTarget:self action:@selector(panEvent:)]; 
    [button addGestureRecognizer:panGR]; 
    [panGR release]; 
} 

- (void)panEvent:(id)sender { 
    button.center = [sender locationInView:self.view]; 
} 

:)をすべきであることを私に示唆している場合、完全にはわからない

答えて

3

それを今のところテストすることはできませんが、それは私にとっては似たような状況で機能しました)、ドラッグを処理するためのコードを追加する必要があります。&ドロップ関連イベント(UIScrollViewのClip Subviewsオプションを無効にして、場所が目的地のCGRectと交差する場合はスーパービュー、そうでない場合はボタンを元の場所に戻すなど)。

だから、これらの行には何が起こっていますか? UIButtonに触れ始めると、そのイベントは(UIButtonによって処理される)タッチイベントとして、または(UIScrollViewによって処理される)パンイベントとしてイベントが続く可能性があるため、その順序はUIScrollViewに到達しません。あなたの指を動かすと、UIButtonのレスポンダによってイベントが棄却されます。なぜなら、指が動いた場合の進行方法を知っているGesture Recognizerがないからです。

しかし、実際に指を動かしたときに何をすべきかを知っているUIButtonにジェスチャ認識機能を追加すると、すべてが異なります。UIButtonはイベントを終了せず、タッチが動いたことをUIScrollViewは認識しませんその上。

私の説明が正確で十分に分かりやすいことを望みます。 a)それがうまくいかない場合、またはb)不明な点がある場合はお知らせください。

幸運:)

+0

は、実行するためには、私はちょうどbutton.centerする正確なポイントを割り当てたい 、同じ時間finely.At移動お使いの一種help.Buttonのためにそんなにありがとう正確な移動、私はtouchesBeganを使用する必要がありますtouchesMoved、touchesEnded.Whileこのメソッドを使用して、fuctionalityは動作していません..... どのように行うには? – user1048990

+0

touchesBegan、MovedおよびEndedを使用すると、すべてのジェスチャーとレスポンダーチェーン機能が閉じられます。 UIPanGestureRecognizerを使用すると、locationInViewを使用してタッチの正確な位置にアクセスできます。これは、パラメータとして渡すビュー(この場合はメインビュー)を基準にCGPointを返します。あなたのケースに合っていませんか? –

0
Try 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
     if (allowAppDrag && [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) { 
     return NO; 
    } 

    return YES; 
} 
関連する問題