1

我正在尝试根据它们与容器中心的距离来缩放 UIScrollView 的子视图。我想我已经接近了,但这并不完全正确。中心线左侧的视图比右侧的视图小一些。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    for( unsigned int i=0; i<[scrollView.subviews count]; i++ )
    {
        UIView *v = [scrollView.subviews objectAtIndex:i];

        // not quite right here
        float scale = 1. - ( abs(scrollView.center.x - ( v.center.x - scrollView.contentOffset.x ) ) / scrollView.contentSize.width/2 );

        v.alpha = scale;

        v.transform = CGAffineTransformIdentity;
        v.transform = CGAffineTransformScale(v.transform, scale, scale);

    }
}

如果有人有任何想法,我将不胜感激,因为这已经是漫长的一天了。

4

1 回答 1

0

测试你的比例计算,你会发现它的第一部分有问题。想象以下值: scrollview center x = 10 scrollView contentOffset x = 30 v1 center x = 5 v2 center x = 15

v1 和 v2 是镜像的(中心左侧 5 个像素,中心右侧 5 个像素),因此它们应该返回相同的比例值。如果您使用代码进行计算,它会返回 35 和 25,这意味着计算不正确。

我不确定您希望您的秤如何准确地表现,但建议是:

float scale = 1. - ( (scrollView.contentOffset.x - abs( v.center.x - scrollView.center.x ) ) / scrollView.contentSize.width/2 );

编辑:试试这个:

float scale = 1. - (abs( v.center.x - scrollView.center.x ) ) / scrollView.contentSize.width/2 );

有很多方法可以进行计算。我的观点是,您应该确保您的操作使用假值为您提供预期结果,而您的操作不是。你的股息给出了错误的结果。

于 2013-05-13T21:56:36.497 回答