2015-11-22 29 views
0

我有几个比它们高的宽度的tableview单元。因此,我采取的视差滚动,所以你可以看到更多的图像,你向上/向下滚动在桌面图像上使用自动布局的视差

Example of desired effect

经过一些code examples几乎让我有,但为我用自动版式,我由于实际图像位置和预期位置的差异,当您第一次开始滚动时,发现“跳跃”。我已经尝试在viewDidAppear和didLayoutSubviews上调用布局函数,尝试在第一次安装后将其踢入形状,但没有运气。

This answer建议使用AutoLayout的解决方案,它看起来非常成功,所以我调整了第一个代码,但它仍然跳转。如果我用这个问题的答案建议的代码,它会到处

CGRect rectInSuperview = [tableView convertRect:self.frame toView:view]; 

float distanceFromCentre = CGRectGetHeight(view.frame)/2 - CGRectGetMinY(rectInSuperview); 
float difference = CGRectGetHeight(self.eventImage.frame) - CGRectGetHeight(self.frame); 
float move = (distanceFromCentre/CGRectGetHeight(view.frame)) *difference; 

CGRect imageRect = self.eventImage.frame; 
imageRect.origin.y = -(difference/2)+move; 
self.verticalCenter.constant = move; 

现在发生了什么,是滚动的伟大工程,但要素约30像素ISH只要你开始第一滚动跳了下去。所以我需要它在没有这个初始跳跃的情况下工作?

初始屏幕负载:

enter image description here

由1px的(第一个和最后一个图像的通知跳)滚动后:

enter image description here

回答

1

我已经更新了链接answer

@implementation TableViewController 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 

    NSArray * cells = [self.tableView visibleCells]; 
    for (TableViewCell* cell in cells) { 
     NSIndexPath * indexPathOfCell = [self.tableView indexPathForCell:cell]; 
     CGRect cellRect = [self.tableView rectForRowAtIndexPath:indexPathOfCell]; 
     cell.verticalCenter.constant = (scrollView.contentOffset.y -cellRect.origin.y)/kParallaxRatio; 
    } 
} 

现在,我已经引入了cellRect以确保单元格的约束常量在位于tableview顶部时为零,而不是将约束常量更改为scrollview内容偏移量。

你可以找到样本here