2016-06-16 15 views
0

内UIViews枠を設定した後、私はいくつかの非常に奇妙な問題を抱えてい呼び出されません。基本的に私は水平1Dグリッドにスナップでドラッグ&ドロップビューを実装しています。まあ、私はビューをドラッグし、その中心座標Xが大きいまたは小さい別のビュー、ドラッグされていないビューは、元の位置の左または右にアニメーションする必要があります。はUIGestureRecognizer UIScrollViewの

これは、ほとんどの時間を正常に動作します。しかし、いくつかの特殊なケースでは動作しません。特定の状況では、ビューはジェスチャーコールバックをもう受信しません。私はこの問題を再現することができ、アニメーションを適用するコードを削除すると、すべてうまく動作することがわかりました。ドラッグビューは、以下のビューが左または右の心に持っているものがある場合

/** 
* Animate element to its saved position 
*/ 
- (void)switchElement:(unsigned int)draggedIndex with:(unsigned int)otherIndex 
{  
    // first animate 
    UIView *view  = views[draggedIndex]; 
    UIView *otherView = views[otherIndex]; 
    // IF I COMMENT THIS OUT, EVERYTHING WORKS FINE 
    otherView.frame = [self getImageRectForIndex:draggedIndex]; 
    // now switch internally 
    if(draggedIndex != otherIndex) 
    { 
     // switch views 
     views[draggedIndex]  = otherView; 
     views[otherIndex] = view; 
    } 
} 

任意のアイデアに移動すべき位置にあるときに

は、基本的にこれが呼び出されるコードであります私はUIViewsをアニメーション化し、それらにジェスチャ認識プログラムを添付する必要がありますか?

誰かが喜んであれば、私はここでクラス全体を貼り付けることができ、それをテストします。

解決策 デザインに「ハイライト」ビューがあります。そして、私はその透明なバックグラウンドビューの背後にある関連するビューを偶然に動かしました。今はaddSubview:ではなくinsertSubview:atIndex:を代わりに使用しています。

しかし、右の一つとして@Anthonin C.答えをマーク。それは正しい方向に私を指していたので(hitTest:メソッドをオーバーライドして見つけました)

+0

アニメーションはユーザーの操作をブロックしていますか? UIViewAnimationOptionAllowUserInteractionを検索すると、役立つかもしれません。例えばhttp://stackoverflow.com/questions/5181216/user-interaction-with-uiview-and-animation-completion-blocks – Dominic

+0

よく、私はコードを簡略化しました。そのアニメーションに接続されていません。フレームを直接設定するとすべてのジェスチャーコールバックをブロックするようにも見えるので –

+0

私は単純な例でレポを作成しました –

答えて

1

あなたのタッチが範囲外でないことを確認するためにotherView.boundsプロパティを追跡してください。私は最近、この問題に直面し、アップルのドキュメントはここに解決策を提供します。Delivering touch events to a view outside the bounds of its parent view

申し訳ありませんが、私はあなたの答えをコメントするのに十分な評判を持っていません。

+0

これは既に行いました。私はフレームとuserinteractionenabledフラグを追跡しています。いくつかの興味深い方向に私を指摘..私はレポ...私が手助けしようとするでしょう私の質問 –

+0

MHを見えますが、この記事では良いrefereneですできるだけ早くあなたのコードを... –

+0

を私の結果を貼り付けます。..すべては大丈夫 –

関連する問題