获取UIView的框架并进行缩放动画

3

我想要添加一个UIView,并使用缩放动画效果,就像这样:

     ^
     |
 <---.--->
     |
     v

这个视图从一个小框架(centerParent.x,centerParent.y,20,20)开始,然后变成(centerParent.x,centerParent.y,300,300)。

但是当我改变框架时,我必须从视图的位置(0.0)开始改变,而不是从它的中心点开始。有人知道如何做吗?

谢谢


请问您能否描述一下您的动画?对于我们来说,这个图表比较难以理解。 - lu yuan
我尝试更好地解释它 :) - damacri86
也许你可以将它嵌入到UIScrollView中,并使用方法zoomToRect:animated:来获得相同的效果。 - lu yuan
3个回答

7

你目前使用的方法(不是使用转换而只是调整视图大小)只需要重置视图的原点或中心。最简单的是中心:

 view.frame = CGRectMake(0, 0, 20, 20);
    CGPoint center = view.center;
    [UIView animateWithDuration: 1.0f animations:^{
        view.frame = CGRectMake(0, 0, 300, 300);
        view.center = center;
    }];

你也可以通过减去大小变化的差值的1/2来重新设置原点,但这需要进行更多的数学计算:
view.frame = CGRectMake(0, 0, 20, 20);
    CGPoint origin = view.frame.origin.
    [UIView animateWithDuration: 1.0f animations:^{
        origin.x -= (300 - 20) / 2;
        origin.y -= (300 - 20) / 2;
        view.frame = CGRectMake(origin.x, origin.y, 300, 300);
    }];

我使用第二种解决方案。没有重新缩放,工作得很好!谢谢 :) - damacri86
@Aaron Hayman - 请问您能告诉我如何使用动画缩小视图吗?先谢谢了。 - Pankaj Gupta
@PankajGupta,你只需要使用我在答案中描述的相同数学方法。基本上,取原点并减去新大小和旧大小之间差异的一半。在动画块内将视图框架设置为新原点+大小。 - Aaron Hayman

1
让一个视图缩小并保持其中心位置很容易,但需要使用transform。以下是代码。 只需添加并连接一个名为zoomerView的视图即可。
在此示例中,我只是将其添加到主视图的touches ended事件中。
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    CGPoint center = zoomerView.center;
    [UIView animateWithDuration:1 animations:^{
        zoomerView.transform = CGAffineTransformScale(zoomerView.transform, 1.2, 1.2);
    }];
}

希望这能对您有所帮助。

谢谢您的回答,但我使用set frame是因为我需要更好的分辨率。 - damacri86

0

试一下这个

[UIView animateWithDuration:secs delay:1.0 options:option
                     animations:^{
                         yourview.transform = CGAffineTransformScale(view.transform, 100.0, 100.0);
                     }
                     completion:nil]; 

这可能会起作用,但视图不会不断重新渲染,因此如果动画稍微有点长,它的质量会非常差。 - pasawaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接