我想实现一个滚动视图,其中包含多个UIView。最左边的项目必须大于其余项目。所以我的问题是这个。每当一个项目离开屏幕到左侧(它的origin.x小于15)时,我都需要将该项目从470x440缩小到235x220像素。这很容易实现。问题在于,移至像素480左侧的项目需要从235x220像素放大到470x440像素,并且需要向左移235像素(以便不覆盖其右侧的项目,而是移入离开元素“缩小”时留在的空间。
我已经尝试了几种不同的方法,但是我无法使动画看起来不错,并且到处都是小故障。
有谁知道我如何实现这种功能?请注意,我不想缩放,但是我想在滚动视图中调整元素的大小,以使最左边的元素(在屏幕上可见)是其他元素的两倍。
最佳答案
万一其他人可能感兴趣,我最终在scrollViewDidScroll内部添加了以下内容:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
float contentOffset = scrollView.contentOffset.x;
int leavingElementIndex = [_scrollView indexOfElementLeavingScene:scrollView.contentOffset.x];
int entereingElementIndex = leavingElementIndex + 1;
if (leavingElementIndex >= 0 && contentOffset > 0) {
CGRect leavingFrame = [[[scrollView subviews] objectAtIndex:leavingElementIndex] frame];
CGRect enteringFrame = [[[scrollView subviews] objectAtIndex:entereingElementIndex] frame];
float scalePerentage = (contentOffset - (_scrollView.smallBoxWidth * leavingElementIndex))/(_scrollView.smallBoxWidth);
enteringFrame.size.width = _scrollView.smallBoxWidth + (_scrollView.smallBoxWidth * scalePerentage);
enteringFrame.size.height = _scrollView.smallBoxHeight + (_scrollView.smallBoxHeight * scalePerentage);
enteringFrame.origin.x = [_scrollView leftMostPointAt:entereingElementIndex] - (_scrollView.smallBoxWidth * scalePerentage);
[[[scrollView subviews] objectAtIndex:entereingElementIndex] setFrame:enteringFrame];
leavingFrame.size.width = _scrollView.largeBoxWidth - (_scrollView.smallBoxWidth * scalePerentage);
leavingFrame.size.height = _scrollView.largeBoxHeight - (_scrollView.smallBoxHeight * scalePerentage);
[[[scrollView subviews] objectAtIndex:leavingElementIndex] setFrame:leavingFrame];
//Reset the other visible frames sizes
int index = 0;
for (UIView *view in [scrollView subviews]) {
if([view isKindOfClass:[SlidingView class]] && index > entereingElementIndex) {
CGRect frame = view.frame;
frame.size.width = _scrollView.smallBoxWidth;
frame.size.height = _scrollView.smallBoxHeight;
frame.origin.x = [_scrollView leftMostPointAt:index];
[view setFrame:frame];
}
index++;
}
}
}
最终的样子是这样的:
End Result http://stuff.haagen.name/iOS%20scroll%20resize.gif