滚动多个屏幕时,基于UIScrollView的contentOffset.x更改视图的alpha

时间:2015-08-28 19:30:32

标签: ios uiscrollview contentoffset

我的横向UIScrollView宽度为960

UIScrollView包含3 UIView's,每一个都设置为背景颜色。

第一个是粉红色,第二个是蓝色,第三个是绿色。

我需要做的是根据用户滚动更改颜色(视图)的alpha。

因此,如果用户在第一个屏幕(粉红色)并开始滚动到第二页(蓝色),那么粉红色应该开始淡化,蓝色将变得更加明显,并且一旦用户完全滑动到那个第二页,它将全是蓝色。

以下是仅使用一个UIView时的方法:

func scrollViewDidScroll(scrollView: UIScrollView) {

        // Offset Percentage
        var percentageHorizontalOffset = scrollView.contentOffset.x / 320;

        // Reduce alpha
        pinkView.alpha = percentageHorizontalOffset
}

这很容易,因为百分比从0.0变为1.0

但是,我需要修改代码以支持3个屏幕。我之前尝试过将320替换为上述方法中的960,但这会导致一些问题。

首先,你不再获得0.0到1.0范围内的百分比,一旦你在第二页上滚动它将是1.0到2.0的范围,这将无法帮我正确修改alpha。 / p>

第二个是alpha更改感觉不是很平滑,尤其是在快速刷UIScrollView时。我之前设置了一堆if语句,试图让它工作但没有任何效果。

当我的UIView's内容大小超过一个屏幕时,如何根据contentOffset.x正确淡出所有3个UIScrollView's的Alpha?

1 个答案:

答案 0 :(得分:0)

最简单的方法是将3色视图视为数组。

current = top();
for (int i = 1; i < location ; i++){
    current = current.next;
}
return current;

然后使用以下算法设置alpha。 这假设一次只有N个视图中的2个。一个在左边,一个在右边。 左边的alpha是基于屏幕外的数量。 右边的alpha是基于屏幕上的数量。 因此,当它离开时,它变为0,导致右转到1,反之亦然。

这使你的滚动方法:

// Put all your views in an array
@property NSArray *coloredViews;

// Later where you set things up, allocate the array.
coloredViews=@[pinkView,blueView,greenView];

试一试。可能不是100%正确,但希望能给你一个想法。你可能想要设置宽度变量而不是使用320.0。