当前位置: 首页 > news >正文

赣州网站建设怎样健康保险网站

赣州网站建设怎样,健康保险网站,江门论坛网站建设,网站后台页面模板下载场景 我们有时候会遇到这样的一个交互场景:我们有一个UITableView 放在一个弹窗中,这个弹窗可以通过滑动进行展示和消失(跟手滑动的方式),然后这个UITableView放在弹窗中,并且可以滚动,展示一些…

场景

我们有时候会遇到这样的一个交互场景:我们有一个UITableView
放在一个弹窗中,这个弹窗可以通过滑动进行展示和消失(跟手滑动的方式),然后这个UITableView放在弹窗中,并且可以滚动,展示一些内容,比如商品信息,评论,(类似抖音的评论弹窗),并且下滑的时候,如果tableView已经滑动到了顶部,就可以响应滑动手势,继续向下滑动弹窗。

思路

首先,我们弹窗视图中有一个tableView,这个tableView是可以正常的滑动的,然后,我们在弹窗视图中添加一个滑动手势,手势的响应方法中,修改弹窗的frame。所以,这个弹窗视图是要响应手势的代理
方的,并且 在

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    代理方法中,如果gestureRecognizer 是自身的滑动手势,otherGestureRecognizer是tableView 的滑动手势,则需要支持同时响应的,即返回YES,同时,需要有个主意事项,就是如果我们的
    tableView滚动到最顶部了,就需要设置tablView的滚动手势不支持响应,否则的话,就会导致 滚动到顶部的时候,tableView还会继续滚动,如果这个时候来回滑动tableView,就会造成弹窗和tableView 同时滚动的情况,这是我们不想要的,所以我们tablView滚动到顶部的时候,就需要设置tableView的pangesture.enabled = NO.

双滑动手势滚动响应机制

我们给弹窗添加一个滑动手势,响应方法为handlePan:
通过测试我们发现,我们手在tableView 上滚动的时候,每次执行
tableView 的 代理方法 scrollViewDidScroll 之前,都会执行 handlePan方法。

请添加图片描述

并且,在一次滑动(手没有脱离屏幕算同一次滑动)过程中,
如果响应方法 handlePan 中有设置过
self.tableView.panGestureRecognizer.enabled = NO; 就会导致
本次滑动中self.tableView 不会滚动,即便在self.tableView.panGestureRecognizer.enabled = NO后面设置了 self.tableView.panGestureRecognizer.enabled = YES也不会滚动

这说明,**在一次滑动手势的响应中, self.tableView.panGestureRecognizer.enabled = NO 的优先级是最高的

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{NSLog(@"哈哈哈哈哈这里是执行scrollViewDidScroll self.panNum是%ld", self.panNum);
}
- (void)handlePan:(UIPanGestureRecognizer *)pan
{self.tableView.panGestureRecognizer.enabled = YES;NSLog(@"哈哈哈哈哈这是第%ld次响应滑动手势handlePan 方法", self.panNum);if (self.panNum % 2 == 0) {self.tableView.panGestureRecognizer.enabled = NO;} else {self.tableView.panGestureRecognizer.enabled = YES;}self.tableView.panGestureRecognizer.enabled = YES;
}

请添加图片描述

以上测试的完整代码

//
//  LBPangestureController.m
//  TEXT
//
//  Created by mac on 2024/7/7.
//  Copyright © 2024 刘博. All rights reserved.
//#import "LBPangestureController.h"@interface LBPangestureController () <UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate>@property (nonatomic, strong) UITableView *tableView;@property (nonatomic, strong) UIPanGestureRecognizer *pangesture;@property (nonatomic, assign) NSInteger panNum;@end@implementation LBPangestureController- (void)viewDidLoad {[super viewDidLoad];[self.view addSubview:self.tableView];[self.view addGestureRecognizer:self.pangesture];// Do any additional setup after loading the view.
}- (void)handlePan:(UIPanGestureRecognizer *)pan
{self.tableView.panGestureRecognizer.enabled = YES;NSLog(@"哈哈哈哈哈这是第%ld次响应滑动手势handlePan 方法", self.panNum);if (self.panNum % 2 == 0) {self.tableView.panGestureRecognizer.enabled = NO;} else {self.tableView.panGestureRecognizer.enabled = YES;}self.tableView.panGestureRecognizer.enabled = YES;
}#pragma mark  - UITableViewDelegate, UITableViewDataSource- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row];return cell;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{return 100;
}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{return 60;
}#pragma mark - uiscrollViewdelegate- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{NSLog(@"哈哈哈哈哈这里是执行scrollViewDidScroll self.panNum是%ld", self.panNum);
}#pragma mark - gesturedelegate- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{if (gestureRecognizer == self.pangesture) {self.panNum ++;}return YES;
}- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{if (gestureRecognizer == self.pangesture && otherGestureRecognizer == self.tableView.panGestureRecognizer) {return YES;}return NO;
}#pragma mark - lazy load- (UITableView *)tableView
{if (!_tableView) {_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 100, 300, 400) style:UITableViewStylePlain];[_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];_tableView.delegate = self;_tableView.dataSource = self;_tableView.backgroundColor = [UIColor cyanColor];}return _tableView;
}- (UIPanGestureRecognizer *)pangesture
{if (!_pangesture) {_pangesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];_pangesture.delegate = self;}return _pangesture;
}/*
#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {// Get the new view controller using [segue destinationViewController].// Pass the selected object to the new view controller.
}
*/@end
http://www.yayakq.cn/news/755380/

相关文章:

  • seo对于电子商务网站推广的作用wordpress 图集
  • 做网站知识公司网站文章
  • 我的网站要怎样做才能让人家搜到python网站开发工程师
  • 北京有一个公司打电话做网站认证wordpress连续获取下一文章
  • 做网站一般用什么几号字商城网站怎么自己搭建
  • 烟台专业做网站公司珠海网站免费制作
  • 做网站的颜色增城新塘镇 企业网站建设
  • 做什么网站比较简单郑州建设信息网简介
  • 网站里面如何做下载的app创新logo设计
  • 织梦采集侠官方网站wordpress中国风
  • 青岛开发区网站建设多少钱wordpress站外搜索
  • 那个做网站好做学校网站的内容
  • 做一个什么网站好网站子目录绑定二级域名
  • 中关村手机网抚州seo排名
  • 网站运营与维护建企聘企业管理有限公司
  • 售后服务 网站建设甘肃省城乡城乡建设厅网站
  • 海宁市住房与建设规划局网站wordpress长文章分页
  • 网站制作费可以做业务宣传费企业做营销型网站
  • 济南网站设计哪家好永康物流网站开发平台
  • 杭州装饰网站建设做网站 售后服务里都写啥
  • 中国网站的建设企业网站制作的方法
  • 阿里云php做网站网站名称注意事项
  • 哪些网站免费做职业测评extract wordpress
  • 免费建站绑定域名wordpress 30天
  • 又做投资的网站吗做的最好的视频教学网站
  • 高效网站推广费用滨州做网站建设价格
  • 代刷网址推广seo优化方案模板
  • 苏州华亭建设工程有限公司网站企业制作宣传片拍摄
  • 上海嘉定建设局网站做行业分析的网站
  • 建设部执业资格注册中心网站装修平台排行榜