Iphone UIScrollView子视图缩放

Iphone UIScrollView子视图缩放,iphone,ios,objective-c,uiscrollview,scaling,Iphone,Ios,Objective C,Uiscrollview,Scaling,我试图根据UIScrollView的子视图与容器中心的距离来缩放它们。我想我很接近,但这并不完全正确。中心线左侧的视图的比例略小于右侧的视图 -(void)scrollViewDidScroll:(UIScrollView *)scrollView { for( unsigned int i=0; i<[scrollView.subviews count]; i++ ) { UIView *v = [scrollView.subviews objectAtI

我试图根据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);

    }
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView
{

对于(unsigned int i=0;i测试您的比例计算,您可以看到它的第一部分有错误。想象以下值: 滚动视图中心x=10 scrollView内容偏移量x=30 v1中心x=5 v2中心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 );

计算方法有很多种。我的观点是,你应该确保你的操作用假值给出了预期的结果,而你的操作没有。你的红利给出了错误的结果。

这似乎不是我想要的。我想要“中间”的视图(这是一个分页的滚动视图,与一个页面一样宽,而不是剪切子视图)比例为1。;。我希望左侧和右侧的视图在距离第一个视图越远时越小。类似(坏ascii):
124;-124;-124;
其中有5个视图,中间的比例为1,下一个比例为.7,然后是.5,如果这有意义的话。用另一个示例编辑我的答案仍然不起作用,现在它从scrollview内容窗口的最左侧开始减小,而不是从两侧的中心向外。很抱歉,如果没有项目访问权限,我不能做更多的事情。请尝试使用不同的计算,直到你得到你想要的结果。我的建议是先“在纸上”做,以确保它是有意义的。一旦实现,记录所有的值,看看它们是如何变化的以及为什么变化的。