2011-12-09 5 views
2

私はIPADアプリケーション用のコントロールを開発しています(初めてApple開発を行っています)。グリッドを模倣するシンプルなコントロールは、親UIView(ファッションのようなグリッド)にすべて追加されたUIView(各セルを表す)のコレクションで構成されています。モノタッチ - スワイプジェスチャーのプログラミング

スワイプジェスチャーを実装することが要件の1つです。ユーザーがグリッドをスワイプしてセルをアクティブ/非アクティブにします。これはデータベースの1/0に相当します。

私はUISwipeGestureを作成し、セルを表す各UIViewに追加しました。スワイプが発生したUIViewのイベントは発生しますが、すべてのUIViewでは発生しません。

私はこれらすべての子UIViewを含む親UIViewを介してSwipeGestureを実装する必要があることを理解します。しかし、私はそれをどのように子供UIViewがスワイプされて知っているか?または他のアプローチが意味をなさないでしょうか?

答えて

2

これは、あなたの質問にはお答えできない場合がありますが、私は同様のユースケースで、ここで撮影したアプローチに話すことができます:私はUIScrollViewのを放棄してのUITableViewを使用します)

1。 UITableViewはUIScrollViewを継承し、仮想化とセル/ビューの再利用のすべてのパフォーマンス上の利点を備えています。デバイスでのパフォーマンスをアプリの最適化に向けて取り組む際には、非常に便利です。

2)UITableViewCellのContentViewを使用してカスタム "グリッド"セルを作成します。また、グリッド行を特別に作成する必要がない場合は、MonoTouch.Dialogを使用することをお勧めします。

3)このawesome class(propsを@praeclarum)を使用して、MonoTouchでジェスチャーを設定します。基本的には、UIGestureRecognizerを汎用引数として提供します。その後、私はあなたがジェスチャー認識は、親ビューに添付されなければならないことを正しいだと思うジェスチャーが

public void HandleSwipe(UISwipeGestureRecognizer recognizer) 
{ 
    if(recognizer.State == UIGestureRecognizerState.Ended) { 

     var point = recognizer.LocationInView(myTableView); 
     var indexPath = myTableView.IndexPathForRowAtPoint(point); 

     // do associated calculations here 
    } 
} 
0

を発生したのUITableViewのポイントをつかむためにLocationInViewメソッドを利用することができます。ジェスチャーレコグナイザに関連付けられたアクションメソッドでは、CGRectContainsPoint()のMonotouchに相当するものを使用して、スワイプが特定のサブビューで発生したかどうかを判断できます。あなたがスワイプが発生したものを見つけるまで、あなたはサブビューを通して反復しなければならないと思います。私はすぐにスワイプされたサブビューを特定する方法を知らない。

4

私はこのスレッドがかなり古いことを知っていますが、私はSwipe拡張メソッドを作成しました。

View.Swipe(UISwipeGestureRecognizerDirection.Right).Event += Swipe_Event; 

void Swipe_Event(ViewExtensions.SwipeClass sender, UISwipeGestureRecognizer recognizer) 
{ 
    View view = sender.View; // do something with view that was swiped. 
} 
+0

この拡張メソッドを使用して、各monotouch.dialog要素に追加しました。これは優れた機能です! –

関連する問題