1

我试图让我的图像看起来像是被踩踏或“压扁”。这是我必须到目前为止的代码,但不仅仅是挤压,它还将底部向上推(因为它是一个缩放动画)。有没有办法让图像简单地缩短而不是缩小?也许我需要使用两个图像?:

            [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];}}];
4

1 回答 1

2

缩放将相对于视图的图层发生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 来自底部。您不希望任何东西从底部脱落,因此您将视图向下移动以抵消这种情况。

于 2012-12-06T17:54:23.713 回答