zoukankan      html  css  js  c++  java
  • 如何在ScrollView滑动的瞬间禁用拖拽手势

    如何在ScrollView滑动的瞬间禁用拖拽手势

    效果:

    在UIScrollView滑动的瞬间禁用pan手势,可以防止用户按着屏幕不放后导致出现的一些莫须有的bug.

    //
    //  ViewController.m
    //  TableViewDemo
    //
    //  Created by XianMingYou on 15/2/23.
    //  Copyright (c) 2015年 XianMingYou. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()<UITableViewDelegate, UITableViewDataSource>
    
    @property (nonatomic, strong) UITableView *tableView;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                                      style:UITableViewStylePlain];
        self.tableView.delegate   = self;
        self.tableView.dataSource = self;
        [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"YouXianMing"];
     
        [self.view addSubview:self.tableView];
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return 3;
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YouXianMing"];
        cell.textLabel.text   = @"YouXianMing";
        return cell;
    }
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        
        CGFloat offsetY = scrollView.contentOffset.y;
        
        if (offsetY <= -100) {
            // 存储这一瞬间的contentOffset值
            CGPoint storePoint = scrollView.contentOffset;
            
            // 禁止用pan手势(禁用pan手势瞬间会导致contenOffset值瞬间恢复成(0, 0))
            scrollView.panGestureRecognizer.enabled = NO;
            
            // 设置此时的contentOffset值
            scrollView.contentOffset = storePoint;
            
            [UIView animateWithDuration:0.5 animations:^{
                // 动画过渡
                scrollView.contentOffset = CGPointMake(0, 0);
            } completion:^(BOOL finished) {
                // 恢复手势
                scrollView.panGestureRecognizer.enabled = YES;
            }];
        }
    }
    
    @end

    关键的一步:

    (禁用手势后,需要存储当时的contentOffset值,然后再重设,用动画过渡即可)

  • 相关阅读:
    layui第三方组件运用
    layui select lay-filter就不渲染和全局渲染用法和校验
    layui 点击操作列后背景色去掉
    layui混合案列问题
    使用layui富文本添加日志内容,并获取子窗体的富文本内容
    layu tab切换table
    layui 父窗体传子窗体select动态选中
    jstl过长的内容处理空格以及换行并通过js处理内容自动换行
    js中运用jstl标签解决checked是否选中等问题
    javaMD5实现加密解密
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4298337.html
Copyright © 2011-2022 走看看