滚动 UIScrollView 时如何缩放

Posted

技术标签:

【中文标题】滚动 UIScrollView 时如何缩放【英文标题】:How to zoom when scroll UIScrollView 【发布时间】:2012-03-08 11:12:02 【问题描述】:

我在 UIScrollView 中添加了几个标签,我希望在滚动时,中间标签的字体大小可以变大。并且之前的中间标签字体大小缩小到更小。变化是逐渐发生的。如下所示。标签 1 向左移动缩小,标签 2 向中间移动变大。 UIScroll 视图中的所有标签。

我尝试了一些,比如滚动时我尝试缩放滚动页面,看起来比我想象的要复杂......

谁有好主意?谢谢!

【问题讨论】:

【参考方案1】:

真的很简单。只需将UIScrollViewDelegate 粘贴到滚动视图并执行类似的操作..

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 

    for (int i = 0; i < [scrollView.subviews count]; i++) 
        UIView *v = [scrollView.subviews objectAtIndex:i];
        float position = v.center.x - scrollView.contentOffset.x;
        float offset = 2.0 - (abs(scrollView.center.x - position) * 1.0) / scrollView.center.x;
        v.transform = CGAffineTransformIdentity;
        v.transform = CGAffineTransformScale(v.transform, offset, offset);
    

但是,如果您对仿射变换不满意,您仍然可以使用 offset 因子缩放矩形并将 UILabel 设置为 adjustsFontSizeToFitWidth...,您就完成了!

只要确保有足够的空间!否则很容易失控。

假设:

    除了这些标签之外,滚动视图中没有其他视图。 需要水平工作。

【讨论】:

【参考方案2】:

这可以通过 CoreAnimation 来完成。您必须保留主标签的索引(位于中心的那个),并在滚动完成后或滚动开始时(在 UIScrollViewDelegate 中使用一些适合您的方法)并通过动画简单地缩小侧面标签。

【讨论】:

【参考方案3】:

在中间的时候把字体的大小(带有动画块)放大,在中间的时候缩小。

您可以使用-(BOOL)isMiddle 向 UILabel 添加类别并将其设置为 true/false。

【讨论】:

以上是关于滚动 UIScrollView 时如何缩放的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 后面如何与 UIView 交互

图像缩放时在 UIScrollView 中停止滚动图像

如何使在Swift中使用UIScrollView进行滚动和缩放

用UIScrollView缩放时,无法正常滚动到下端

如何区分 UIScrollView 中的平移和滚动

通过代理监听UIScrollView的滚动事件 Objective-C语言