メールアプリ内で左から右にスワイプしたときにメールを未読または「未読としてマーク」するために、メールアプリでAppleが使用するものと同じテクニックを複製しようとしています。
similarsolutions が見つかりましたが、右から左にスワイプするジェスチャのみです。この同じソリューションが、Apple SDKの反対方向の一部として利用できることを望んでいました。
iOSのメールアプリと同じ左から右へのジェスチャー効果を実現するにはどうすればよいですか?
同様の解決策を見つけましたが、右から左にスワイプするジェスチャーのみです右から左に。
SWTableViewCell には、必要なすべてのオプションがあります。
セルのキューイング中に、必要に応じてボタンの左右セットを設定します。
cell.leftUtilityButtons = [self leftButtons];
cell.rightUtilityButtons = [self rightButtons];
cell.delegate = self;
また、View Controllerをデリゲートとして設定することにより、ボタンのクリック音を聞くことができます。実装方法の詳細は、そのリンクにあります
例1:
例2:
縦に積み重ねられたボタンを探している場合は、 this を確認してください。
通常、テーブルレベルで実装します。
- (void)viewDidLoad
{
[super viewDidLoad];
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(leftSwipe:)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
[self.tableView addGestureRecognizer:recognizer];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(rightSwipe:)];
recognizer.delegate = self;
[recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[self.tableView addGestureRecognizer:recognizer];
}
その後、方向を制御し、自由にカスタマイズできます
- (void)leftSwipe:(UISwipeGestureRecognizer *)gestureRecognizer
{
//do you left swipe stuff here.
}
- (void)rightSwipe:(UISwipeGestureRecognizer *)gestureRecognizer
{
//do you right swipe stuff here. Something usually using theindexPath that you get that way
CGPoint location = [gestureRecognizer locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
}
クレジットは Jade Mind
指定したリンクで受け入れられた回答は、両方のスワイプ方向に対するものです。
通知gestureRecognizer.direction
は、YES
とUISwipeGestureRecognizerDirectionLeft
の両方に対してUISwipeGestureRecognizerDirectionRight
を返します。
いくつかのことを変更するだけです。
スワイプ時に呼び出されるセレクターを変更し、投稿の例にあるメソッドの代わりにメソッドを呼び出すようにします。
スワイプの方向を左から右のみに変更し、現在の両方向ではなく、私が理解しているように、あなたは一方向のスワイプを設定しようとしているためです。
したがって、コードは次のようになります。
// In cellForRowAtIndexPath:, where you create your custom cell
cell.tableView=tableView;
cell.indexPath=indexPath;
UISwipeGestureRecognizer *swipeGestureRecognizer=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(YOUR_METHOD_GOES_HERE)];
[cell addGestureRecognizer:swipeGestureRecognizer];
。
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if([[gestureRecognizer view] isKindOfClass:[UITableViewCell class]] && ((UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionRight)
return YES;
}
また、受け入れられた回答の下にある回答を使用し、ジェスチャー認識機能のdirection
プロパティを、例の現在の方向であるUISwipeGestureRecognizerDirectionRight
ではなく、UISwipeGestureRecognizerDirectionLeft
に変更することもできます。
これを実装することを選択した場合、viewControllerはジェスチャー認識デリゲートを実装する必要があり、コードは次のようになります。
// Call this method in viewDidLoad
- (void)setUpLeftSwipe {
UISwipeGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(swipeRightt:)];
[recognizer setDirection:UISwipeGestureRecognizerDirectionRight];
[self.tableView addGestureRecognizer:recognizer];
recognizer.delegate = self;
}
- (void)swipeRight:(UISwipeGestureRecognizer *)gestureRecognizer {
CGPoint location = [gestureRecognizer locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
... do something with cell now that i have the indexpath, maybe save the world? ...
}
注-間違っていない場合は、セルをスワイプするアニメーションを自分で作成する必要があります。Xcodeのデフォルトのセルアニメーションは左にスワイプしたときだけだと思います。
クレジットは、指定したリンクからMadhavanRP
およびJulian
に割り当てられます。私はあなたのニーズに合わせて彼らの答えを修正しました。
自分でこれを試したり実装したりしていません。