内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:メソッドをオーバーライドして見つけました)
アニメーションはユーザーの操作をブロックしていますか? UIViewAnimationOptionAllowUserInteractionを検索すると、役立つかもしれません。例えばhttp://stackoverflow.com/questions/5181216/user-interaction-with-uiview-and-animation-completion-blocks – Dominic
よく、私はコードを簡略化しました。そのアニメーションに接続されていません。フレームを直接設定するとすべてのジェスチャーコールバックをブロックするようにも見えるので –
私は単純な例でレポを作成しました –