UIAttachmentBehavior と UIPanGestureRecognizer で水平方向のスワイプを実装するカスタム UITableViewCell があります。UITableViewCell サブクラスの関連部分は次のとおりです。
- (void)panDidChange:(UIPanGestureRecognizer *)gesture {
CGPoint location = [gesture locationInView:[self tableView]];
location.y = CGRectGetMidY(self.frame);
switch (gesture.state) {
case UIGestureRecognizerStateBegan: {
self.panAttachment = [[UIAttachmentBehavior alloc] initWithItem:self attachedToAnchor:location];
[self.animator addBehavior:self.panAttachment];
break;
}
次に、UIGestureRecognizerStateChanged のときに、self.panAttachment.anchorPoint を場所として設定しました。
さて、これは起動時から正常に機能しますが、セルをtableViewに追加するか、tableViewからセルを削除してスワイプしようとするとすぐに、セルはtableViewの変更前の前の位置に移動します(セルがあった場合は1セル下)削除、セルが追加された場合は 1 つ上のセル)。私が知る限り、これは、tableView 内の位置が変更されたときにセルのフレームが更新されていないため、位置の y 座標が同期していないためです。[self setNeedsDisplay] と、見つけた他のすべての「ビューの更新」メソッドを試しましたが、役に立ちませんでした。
上記のアニメーターを次のように作成しています。
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:[self tableView]];