我有一个自定义 UITableViewCell 来实现使用 UIAttachmentBehavior 和 UIPanGestureRecognizer 水平滑动。这是 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 更改之前的先前位置(如果一个单元格是向下一个单元格删除,如果添加了一个单元格,则增加一个单元格)。据我所知,这是因为单元格的框架在 tableView 中的位置发生变化时没有更新,因此位置的 y 坐标不同步。我试过 [self setNeedsDisplay] 和我能找到的所有其他“更新视图”方法,但无济于事。
我正在创建上面引用的动画师,如下所示:
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:[self tableView]];