2

カスタム UITableViewCell サブクラスを使用する UITableView のカスタム スワイプ イベントに取り組んでいます。UIGestureRecognizerDelegateをヘッダーに含め、これをviewDidLoad:

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
swipeLeft.numberOfTouchesRequired = 1;
[self.tableView addGestureRecognizer:swipeLeft];

私の swipeLeft メソッドは次のようになります。

-(void)didSwipe:(UISwipeGestureRecognizer *)recognizer {

    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        CGPoint swipeLocation = [recognizer locationInView:self.tableView];
        NSIndexPath *swipedIndexPath = [self.tableView indexPathForRowAtPoint:swipeLocation];
        NSDictionary *clip = [self.clips objectAtIndex:swipedIndexPath.row];
        NSLog(@"Swiped!");


    }
}

それは一種の機能ですが、スワイプは信じられないほど正確でなければなりません. ほぼ不可能なほど正確です。

代わりに UIPanGestureRecognizer を使用することでほとんど機能しましたが、残念ながら、グローバル パン ジェスチャ レコグナイザー (興味のある方は ECSlidingViewController) を使用するグローバル サイド ドロワー コンポーネントではうまくいきませんでした。

これを回避する方法はありますか?私は解決策を探して何時間もSOをグーグル検索して閲覧してきたので、どんな助けもいただければ幸いです。

4

2 に答える 2

8

Twitter でKolin Krewinkelが指摘したように、これら 2 つのデリゲート メソッドを実装するとうまくいきました。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    return YES;
}
于 2013-04-09T01:53:43.063 に答える
0

ECSlidingViewController を使用し、UITableView でスワイプして削除すると、同様の問題が発生していました (私の場合、一番上のビュー コントローラーが左にスライドしてメニューが表示されます)。

このような私のデフォルトのpanGestureプロパティにデリゲートを追加しECSlidingViewControllerて、画面の右端でスワイプが開始された場合にのみメニューをプルすることで、問題を修正しました。

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
  if ([gestureRecognizer locationInView:gestureRecognizer.view].x > ([UIScreen mainScreen].bounds.size.width - 60.0))
  {
    return YES;
  }
return NO;
}
于 2014-11-28T05:49:15.340 に答える