• 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(@"向左滑动");
    }
  • 相关阅读:
    Simple ASP.NET CORE 2.2 App +Vue JS
    Upload Image to .NET Core 2.1 API
    Nginx支持WebSocket服务
    DD打卡
    Asp.net Core 源码-PagedList<T>
    Asp.net Core 源码-UrlExtensions
    Asp.net Core 源码-SessionExtensions
    树莓派资源集合
    frp内网穿透
    Nuget包含cssjs等资源文件
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4946876.html
Copyright © 2020-2023  润新知