我试着让我的图像看起来像是被踩到了,或者被“压扁”了。这是我必须要做的代码,但它不只是挤压,它还会将底部向上推(因为这是一个缩放动画)。有没有一种方法可以让图像变短而不是缩小?也许我需要使用两个图像?:
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut
animations:^{
basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9);}
completion:^(BOOL finished){if (finished){
[UIView animateWithDuration:0.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut
animations:^{
basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);}
completion:NULL];}}];
发布于 2012-12-07 01:54:24
缩放将相对于视图的层的anchorPoint
发生,默认情况下,它是层的中心。
因此,选项是:-更改锚点;-在三个部分中组成变换:(1)将锚点转换到底部;(2)缩放;(3)将锚点转换回它所在的位置;-在两个部分中合成转换:(1)缩放;(2)将底部转换到它原来所在的位置。
如果其他条件相同,则更改锚点与转换具有相同的效果,因此无论您如何描述整个过程,摘要版本都是以某种形式添加转换。最简单的方法可能是在设置变换的同时设置层的center
。由于缩放和平移都是同时应用的线性变换,因此它们将完全同步。
因此,例如,你会改变:
basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9);
更像这样的东西:
CGFloat amountToScale = 0.9f;
CGAffineTransform transform =
CGAffineTransformMakeTranslation(0.0f,
(1.0f - amountToScale)*0.5f*basketView.bounds.size.height);
basketView.transform = CGAffineTransformScale(transform,
1.0f, amountToScale);
在该特定情况下,缩放到0.9将总共消除原始大小的0.1。锚点在中心,上面有0.05个,底部有0.05个。你不想让任何东西从底部掉下来,所以你将视图向下移动以抵消这一点。
https://stackoverflow.com/questions/13749159
复制相似问题