首页 > 移动平台 > 详细

iOS之UITableViewCell左右滑动效果

时间:2015-11-08 14:34:11      阅读:225      评论:0      收藏:0      [点我收藏+]

首先在 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(@"向左滑动");
}

iOS之UITableViewCell左右滑动效果

原文:http://www.cnblogs.com/Free-Thinker/p/4946876.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!