首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平滑我的滚动TouchesMoved

平滑我的滚动TouchesMoved
EN

Stack Overflow用户
提问于 2015-07-05 01:29:46
回答 1查看 139关注 0票数 2

我有一个半透明的视图,位于台面上。当我将视图拖到屏幕底部附近时,我想要顺利地滚动它下面的表视图。

我试着模仿:

用户拖动悬停视图靠近屏幕底部,并保持在那里。表视图滚动直到它们松开,或者直到它们到达表的底部。用户放弃悬停视图。

目前我正在做:

代码语言:javascript
复制
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    if (!_hoverViewTouch) {
        return;
    }

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:self];
    CGPoint prevLocation = [touch previousLocationInView:self];

    //scroll down.
    if (prevLocation.y < location.y) {
        if (location.y >= _table.frame.size.height - rowHeight) {
            NSArray *cells = [_table visibleCells];
            UITableViewCell *cell = [cells objectAtIndex:round(cells.count / 2)];
            NSIndexPath *indexPath = [_table indexPathForCell:cell];
            [_table scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:true];
        }
    }

    CGRect frame = [hoverView frame];
    frame.origin.y = location.y - (hoverView.frame.size.height / 2.0f);
    [hoverView setFrame:frame];
}

然而,它滚动到表格底部的速度是如此之快。我怎样才能放慢速度或者平滑滚动呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-05 16:04:34

UITableView的scrollToRowAtIndexPath方法不能控制动画速度。相反,您可以使用CADisplayLink来平稳地更新表视图的contentOffset

代码语言:javascript
复制
- (void)startAnimatingTable
{
    self.scrollStartDate = [NSDate date];
    self.startContentOffset = self.tableView.contentOffset;
    self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkFired:)];
    [self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}

- (void)stopAnimatingTable
{
    [self.displayLink removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
    self.displayLink = nil;
}

- (void)displayLinkFired:(CADisplayLink *)displayLink
{
    NSTimeInterval interval = -[self.scrollStartDate timeIntervalSinceNow];
    CGFloat speed = 100;
    CGFloat yOffset = self.startContentOffset.y + speed * interval;
    self.tableView.contentOffset = CGPointMake(self.startContentOffset.x, yOffset);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31226479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档