iOS之UITableViewCell左右滑动效果

首先在 UITableViewCell.h 中声明一个代理

@protocol UITableViewCellSlideDelegate <UITableViewDelegate>

@optional
- (void)tableView:(UITableView *)tableView slideToRightWithIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView slideToLeftWithIndexPath:(NSIndexPath *)indexPath;
@end

然后在 UITableViewCell.m 中 创建一个手势 UIPanGestureRecognizer,因为我们左右滑动的时候必须依赖拖动手势,然后在 UIPanGestureRecognizer 的代理方法中进行判断到底是左滑还是右滑

static const CGFloat kSlideWidth = 80;
static const CGFloat kSlideWidthDelta = 0.08;

#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    if (self.panGestureRecognizer == gestureRecognizer) {
        CGPoint point = [self.panGestureRecognizer translationInView:self];
        return fabs(point.x) > fabs(point.y); } else { return NO; } } #pragma mark - Event Handler - (void)panGestureRecognizerHandler:(UIPanGestureRecognizer *)gestureRecognizer { switch (gestureRecognizer.state) { case UIGestureRecognizerStateChanged: { CGPoint point = [gestureRecognizer translationInView:self]; CGFloat offset = point.x; if (offset >= kSlideWidth) { offset = kSlideWidth + (offset - kSlideWidth) * kSlideWidthDelta; if (_parent.delegate && [_parent.delegate respondsToSelector:@selector(tableView:slideToRightWithIndexPath:)]) { id<UITableViewCellSlideDelegate> delgate = (id<UITableViewCellSlideDelegate>)_parent.delegate; [delgate tableView:_parent slideToRightWithIndexPath:_indexPath]; } } else if (offset <= -kSlideWidth) { offset = -kSlideWidth + (offset + kSlideWidth) * kSlideWidthDelta; if (_parent.delegate && [_parent.delegate respondsToSelector:@selector(tableView:slideToLeftWithIndexPath:)]) { id<UITableViewCellSlideDelegate> delgate = (id<UITableViewCellSlideDelegate>)_parent.delegate; [delgate tableView:_parent slideToLeftWithIndexPath:_indexPath]; } } self.contentView.center = CGPointMake(self.center.x + offset, self.contentView.center.y); break; } default: break; } }

最后就可以在外部调用代理方法进行相关的操作了

#pragma mark - UITableViewCellSlideDelegate
- (void)tableView:(UITableView *)tableView slideToRightWithIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"向右滑动");
}

- (void)tableView:(UITableView *)tableView slideToLeftWithIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"向左滑动");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值