这里是结果图
参考抖音的滚动结果,需要我们在竣事拖动的时候,动画设置偏移量
这里有一个注意点,由于我们是在拖动竣事的时候,手动改变tableview的偏移量,
改变了tableView 自身原有的的滚动结果,所以我们
需要讲tableView 的frame的高度设置为三个cell的高度,然后,设置contentInset
的顶部和底部都是cell的高度,否则会导致我们滚动的过程中cell还没有加载出来
,展示成一片空白的结果
直接上代码
- //
- // DouyinScrollViewController.m
- // TEXT
- //
- // Created by mac on 2024/4/28.
- // Copyright © 2024 刘博. All rights reserved.
- //
- #import "DouyinScrollViewController.h"
- #import "DouyinScrollTableViewCell.h"
- static CGFloat const height = 700;
- @interface DouyinScrollViewController () <UITableViewDelegate, UITableViewDataSource>
- @property (nonatomic, strong) UITableView *tableView;
- @property (nonatomic, assign) NSInteger currentIndex;
- @property (nonatomic, assign) CGFloat velocity;
- @property (nonatomic, strong) NSMutableArray *colorArray;
- @end
- @implementation DouyinScrollViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- [self.view addSubview:self.tableView];
- self.colorArray = [NSMutableArray array];
- for (int i = 0; i < 10; i ++) {
- int r = arc4random() % 255;
- int g = arc4random() % 255;
- int b = arc4random() % 255;
- CGFloat rr = r / 255.0;
- CGFloat rg = g / 255.0;
- CGFloat rb = b / 255.0;
- UIColor *color = [[UIColor alloc]initWithRed:rr green:rg blue:rb alpha:1];
- [self.colorArray addObject:color];
- }
- [self.tableView reloadData];
- // Do any additional setup after loading the view.
- }
- #pragma mark - UITableViewDelegate, UITableViewDataSource
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- DouyinScrollTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([DouyinScrollTableViewCell class])];
- [cell updateWithColor:self.colorArray[indexPath.row]];
- // cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];
- // cell.backgroundColor = self.colorArray[indexPath.row];
- // if (!cell.contentView.backgroundColor) {
- // cell.contentView.backgroundColor = self.colorArray[indexPath.row];
- // }
- // return cell;
- return cell;
- }
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- return 10;
- }
- - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
- {
- return height;
- }
- #pragma mark - scrolllVIewDelegate
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView
- {
-
- }
- - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
- {
- self.velocity = velocity.y;
- }
- - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
- {
- dispatch_async(dispatch_get_main_queue(), ^{
- CGPoint translatedPoint = [scrollView.panGestureRecognizer translationInView:scrollView];
- //UITableView禁止响应其他滑动手势
- scrollView.panGestureRecognizer.enabled = NO;
- CGFloat translateCheck = 60;
- NSLog(@"哈哈哈哈获取停止拖动时候的速度%f", self.velocity);
- if (fabs(self.velocity) > 0.4) {
- translateCheck = 8;
- }
-
-
- if(translatedPoint.y < -translateCheck && self.currentIndex < 10) {
- self.currentIndex ++; //向下滑动索引递增
- }
- if(translatedPoint.y > translateCheck && self.currentIndex > 0) {
- self.currentIndex --; //向上滑动索引递减
- }
- [UIView animateWithDuration:0.15
- delay:0.0
- options:UIViewAnimationOptionCurveEaseOut animations:^{
- //UITableView滑动到指定cell
- [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.currentIndex inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
- } completion:^(BOOL finished) {
- //UITableView可以响应其他滑动手势
- scrollView.panGestureRecognizer.enabled = YES;
- }];
-
- });
- }
- #pragma mark - lazy load
- - (UITableView *)tableView
- {
- if (!_tableView) {
- _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 60 - height, CGRectGetWidth(self.view.bounds), height * 3) style:UITableViewStylePlain];
- [_tableView registerClass:[DouyinScrollTableViewCell class] forCellReuseIdentifier:NSStringFromClass([DouyinScrollTableViewCell class])];
- _tableView.rowHeight = height;
- _tableView.contentInset = UIEdgeInsetsMake(height , 0, height, 0);
- _tableView.estimatedRowHeight = height;
- _tableView.delegate = self;
- _tableView.dataSource = self;
- _tableView.backgroundColor = [UIColor redColor];
- _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
- _tableView.separatorInset = UIEdgeInsetsZero;
- }
- return _tableView;
- }
- /*
- #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
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |