Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 制作两个UIScrollView';s滚动为一,或在滚动视图之间转移惯性_Ios_Cocoa Touch_Uiscrollview - Fatal编程技术网

Ios 制作两个UIScrollView';s滚动为一,或在滚动视图之间转移惯性

Ios 制作两个UIScrollView';s滚动为一,或在滚动视图之间转移惯性,ios,cocoa-touch,uiscrollview,Ios,Cocoa Touch,Uiscrollview,在我们的应用程序中,您可以通过从多个第三方来源搜索选项来构建问题。大多数搜索结果都显示为全宽tableview单元格,因为它们的数据适合这种格式(在缩略图旁边可以显示一组元数据文本) 但是,对于图像,集合视图更有意义。但是现在我遇到了一个问题,垂直滚动的tableview包含一个垂直滚动的集合视图 我可以通过捕获集合视图上的viewditscroll并以适当的偏移量更新父滚动视图,使其在某种程度上起作用,但它只有在用户主动拖动集合视图时才起作用 self.collectionVC.scroll

在我们的应用程序中,您可以通过从多个第三方来源搜索选项来构建问题。大多数搜索结果都显示为全宽tableview单元格,因为它们的数据适合这种格式(在缩略图旁边可以显示一组元数据文本)

但是,对于图像,集合视图更有意义。但是现在我遇到了一个问题,垂直滚动的tableview包含一个垂直滚动的集合视图

我可以通过捕获集合视图上的
viewditscroll
并以适当的偏移量更新父滚动视图,使其在某种程度上起作用,但它只有在用户主动拖动集合视图时才起作用

self.collectionVC.scrollViewDidScroll = ^(UIScrollView *scrollView) {
    @strongify(self);
    if (self.tableView.contentOffset.y < self.scrollingHeightOffset && scrollView.contentOffset.y > 0) {
        CGFloat maxheight = MIN(self.scrollingHeightOffset, self.tableView.contentOffset.y + scrollView.contentOffset.y);
        self.tableView.contentOffset = CGPointMake(0, maxheight);
        scrollView.contentOffset = CGPointMake(0, 0);
    } else if (scrollView.contentOffset.y < 0 && self.tableView.contentOffset.y > -topGuide) {
        CGFloat minheight = MAX(-topGuide, self.tableView.contentOffset.y + scrollView.contentOffset.y);
        self.tableView.contentOffset = CGPointMake(0, minheight);
        scrollView.contentOffset = CGPointMake(0, 0);
    }
};
self.collectionVC.scrollViewDidScroll=^(UIScrollView*scrollView){
@强化(自我);
if(self.tableView.contentOffset.y0){
CGFloat maxheight=MIN(self.scrollingheightofset,self.tableView.contentOffset.y+scrollView.contentOffset.y);
self.tableView.contentOffset=CGPointMake(0,最大高度);
scrollView.contentOffset=CGPointMake(0,0);
}else if(scrollView.contentOffset.y<0&&self.tableView.contentOffset.y>-topGuide){
CGFloat minheight=MAX(-topGuide,self.tableView.contentOffset.y+scrollView.contentOffset.y);
self.tableView.contentOffset=CGPointMake(0,最小高度);
scrollView.contentOffset=CGPointMake(0,0);
}
};
当“抛出”集合视图时,滚动会突然停止,从而失去集合视图的惯性。触摸tableview滚动有一个不同的问题,因为当它到达末尾时,我没有捕捉到它,而是滚动集合视图


现在集合视图位于tableview的一个单元格中,但如果需要,它也可以是对等的。我正在尝试确定将这两个滚动视图作为一个视图显示的最佳方式。

据我所知,您做了正确的事情
viewDidScroll
即使在用户抬起手指并将scroll view返回到某个位置后,也应多次调用

当用户拖动其中一个滚动视图时,我使用完全相同的方法同步滚动两个滚动视图。工作完美


您可能需要检查此方法中的计算逻辑。查看是否需要在用户抬起手指后进行所有更改,但您以错误的方式定位了其他滚动视图。

我这样做了,请告诉我它是否适合您

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView1.panGestureRecognizer addTarget:self action:@selector(didRecognizePanGesture:)];
    [self.tableView2.panGestureRecognizer addTarget:self action:@selector(didRecognizePanGesture:)];

}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (self.selectedTableView == scrollView)
    {
        if (scrollView == self.tableView1)
        {
            self.tableView2.contentOffset = scrollView.contentOffset;
        }
        else if (scrollView == self.tableView2)
        {
            self.tableView1.contentOffset = scrollView.contentOffset;
        }
    }
}

- (void)didRecognizePanGesture:(UIPanGestureRecognizer*)gesture
{
    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        if (self.selectedTableView != nil) //this is gonna make stop the previous scrollView
        {
            [self.selectedTableView setContentOffset:self.selectedTableView.contentOffset animated:NO];
        }
        self.selectedTableView = (UITableView*)gesture.view;
    }
}

将子scrollview上的偏移量重置为0
scrollview.contentOffset=CGPointMake(0,0)是否正确将其移动传输到父级时?我觉得这会导致投掷时的惯性损失,而不是主动拖拽。我不确定,因为我真的不知道它是如何工作的,你想做什么。尝试将您收到的所有值记录在
didcroll
中,它会让您了解父视图的情况-从中您可以推断出您需要对子视图执行的操作。您的表视图在这里的高度相同吗?是的,但如果您有不同的高度,您可能应该将contentOffset设置为与高度或contentSize成比例。