首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“南瓜”动画效果

“南瓜”动画效果
EN

Stack Overflow用户
提问于 2012-12-07 01:29:27
回答 1查看 271关注 0票数 1

我试着让我的图像看起来像是被踩到了,或者被“压扁”了。这是我必须要做的代码,但它不只是挤压,它还会将底部向上推(因为这是一个缩放动画)。有没有一种方法可以让图像变短而不是缩小?也许我需要使用两个图像?:

代码语言:javascript
运行
复制
            [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];}}];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 01:54:24

缩放将相对于视图的层的anchorPoint发生,默认情况下,它是层的中心。

因此,选项是:-更改锚点;-在三个部分中组成变换:(1)将锚点转换到底部;(2)缩放;(3)将锚点转换回它所在的位置;-在两个部分中合成转换:(1)缩放;(2)将底部转换到它原来所在的位置。

如果其他条件相同,则更改锚点与转换具有相同的效果,因此无论您如何描述整个过程,摘要版本都是以某种形式添加转换。最简单的方法可能是在设置变换的同时设置层的center。由于缩放和平移都是同时应用的线性变换,因此它们将完全同步。

因此,例如,你会改变:

代码语言:javascript
运行
复制
basketView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1, 0.9);

更像这样的东西:

代码语言:javascript
运行
复制
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个。你不想让任何东西从底部掉下来,所以你将视图向下移动以抵消这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13749159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档