2

我使用 UIScrollView 实现了以下功能并启用了分页。 在此处输入图像描述

我希望滚动视图的中心元素显示得比其他元素大一点。当滚动视图根据其位置滚动时,需要增加/减少文本标签的字体。

我尝试使用变换,但运气不好。

添加标签的代码:

array = [[NSMutableArray alloc] init];

for(int i=0;i<10;i++){
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(x, 0, 150, 50)];
    label.text = [NSString stringWithFormat:@"ID - %d",i];
    label.textAlignment = UITextAlignmentCenter;
    x +=150;
    [self.scrollView addSubview:label];
    [array addObject:label];
}

[self.scrollView setContentSize:CGSizeMake(x, 50)];

我在 ScollViewDidScroll 中执行的动画

float position = label.center.x - scrollView.contentOffset.x;
float offset = 2.0 - (fabs(scrollView.center.x - position) * 1.0) / scrollView.center.x;
label.transform = CGAffineTransformIdentity;
label.transform = CGAffineTransformScale(label.transform,offset, offset);

代码:到目前为止我所取得的成就:

https://www.dropbox.com/s/h2q4qvg3n4fi34f/ScrollViewPagingPeeking.zip?dl=0

4

2 回答 2

0

它将使用集合视图工作。返回根据位置计算变换比例的布局属性。子类化您正在使用的 UICollectionViewLayout(可能是 UICollectionViewFlowLayout)。要使基于位置的调整大小起作用,您应该重写它的一些方法:

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
{
    return YES;
}

- (NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *array = [super layoutAttributesForElementsInRect:rect];

    for (UICollectionViewLayoutAttributes *attributes in array)
    {
        [self updateLayoutAttributesForItemAtIndexPath:layoutAttributes];
    }

    return array;
}

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewLayoutAttributes *layoutAttributes = [super layoutAttributesForItemAtIndexPath:indexPath];
    [self updateLayoutAttributesForItemAtIndexPath:layoutAttributes]; 
}

- (UICollectionViewLayoutAttributes *)updateLayoutAttributesScaleForPosition:(UICollectionViewLayoutAttributes *)layoutAttributes
{
    // NOTE: Your code assigning an updated transform scale based on the cell position here

    return layoutAttributes;
}

您可能缺少的主要内容是对 shouldInvalidateLayoutForBoundsChange: 方法的覆盖

于 2015-11-27T11:54:45.963 回答
0

不要使用滚动视图,使用 UICollectionView 和使 collectionView 单元格随着屏幕尺寸变大。

并启用它的分页属性而不是使用它的委托方法。

这是更可取和更有效的分页方式。

于 2015-11-27T05:20:00.203 回答