我的横向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?
答案 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。