当前位置: 首页 > 知识库问答 >
问题:

为变换后的UIImageView设置动画?

赵锐
2023-03-14

我试图在创建自定义控件的同时学习一些动画。我在这里经历了一个奇妙的教程:http://www.raywenderlich.com/9864/how-to-create-a-rotating-wheel-control-with-uikit

我已经让它工作了,开发者在github上有一个指向他的代码的链接:https://github.com/funkyboy/How-To-Create-a-Rotating-Wheel-Control-with-UIKit

现在我要做的是,当选定的项目在选定的插槽中旋转时,为其设置动画,使其增长。我还将选定的插槽更改为位于底部,为了适应这种情况,我更改了方法中的代码

 - (void) drawWheel

我改了台词

感应电动机。transform=CGAffineTransformMakeRotation(角度大小*i);

感应电动机。transform=CGAffineTransformMakeRotation(角度大小*i-M_PI/2);

考虑到目前的情况-pi/2

接下来我要做的是让选定的丁香变大变小;这会发生在两个不同的场合;一次,当轮子加载时,当一个闭合物穿过选定的位置时。这里我有点卡住了。

我写了以下方法:

>

  • (void)growImage:(UIImageView*)v{

    [UIView动画以持续时间: 1.0动画:^{v.transform=CGAffineTransformMakeScale(1.3,1.3);}完成:^(BOOL完成){[UIView动画以持续时间: 1.0动画:^{v.transform=CGAffineTransformMakeScale(1.0,1.0); }]; }];

    }

    我首先调用initWheel方法,其中初始丁香是第一次设置:

      if (i == 0) {
            im.alpha = maxAlphavalue;
            [self growImage: cloveImage];
       }
    

    对于第二项,我写了以下方法:

    • (空)findViewand成长图像:(int)标签{for(id myArrayElement inself.container.subviews){UIImageView*v=myArrayElement; if(v.tag==tag){[自成长图像: v];打破; } } }

    我在-(void)touchesend:(NSSet*)toucheevent:(UIEvent*)event中调用它{

    因此,在设置alpha值之后:

    lab.alpha = maxAlphavalue;
    [self findViewandGrowImage : currentValue];
    

    对于我做错了什么,我有一种根本的脱节感;第一个案例效果良好;第二种情况使丁香在轮子上旋转到不同的部分,并生长和收缩。。。我不知道为什么。我想要任何意见。

    谢谢你。

  • 共有1个答案

    席嘉祯
    2023-03-14

    如果您有以下转换:

    m.transform = CGAffineTransformMakeRotation(angleSize*i - M_PI/2);
    

    然后将其动画化为

    [UIView animateWithDuration:1.0 animations:^{ v.transform = CGAffineTransformMakeScale(1.3, 1.3); } 
    

    当它设置动画时,它将从(angleSize*i-M_PI/2)旋转回角度0,因为第二次变换不包括此旋转。

    如果要更改其大小并保持其当前角度,则需要将旋转与比例相结合,然后在计算中使用该比例,如下所示:

    [UIView animateWithDuration:1.0 animations:^{ 
        CGAffineTransform newTransform = CGAffineTransformMakeRotation(angle);
        v.transform = CGAffineTransformScale(newTransform, 1.3, 1.3);v.transform = CGAffineTransformMakeScale(1.3, 1.3);
     } 
    
     类似资料:
    • 问题内容: 在Obj-C中 将设置contentMode。 为什么 在Swift中不能工作? 问题答案: 令人困惑的是,Swift删除了ObjC枚举值的前缀: 这是因为Swift已经知道正在使用哪种枚举类型。另外,您也可以指定枚举: 注意:在版本3之前的Swift版本中,“ scaleAspectFill”需要大写。

    • 虽然有几个问题的答案与我的相似,但似乎没有一个能解决我的困境。我有一个图像视图,我可以通过改变水平和垂直约束来移动它,并使用长按手势在屏幕上移动。如果这张图像没有移动一定的距离,我希望它能动画化回到原来的位置。我正在使用以下代码示例来尝试执行此操作: 和在其他地方定义为用户单击的位置 和定义为用户在超级视图中的位置 不用说,平移图像时,一切都正常。它会拖动,然后在手势结束时停止。问题是,如果用户没

    • 点击图像,图像会产生抖动。 [Code4App.com]

    • 我正在MyUILabel上执行2个动画。MyUILable是从UILabel派生的自定义类,它实现了只绘制边框的drawRect方法。 这是我的动画代码: 在第一个动画开始时,一条灰色的线出现在我的标签的顶部边缘,并且在所有动画完成后仍然存在。我想提一下,这条线不是我的绘图实现的一部分,即使我的绘图是空的,它也会出现。标签也比最初小一点。 所附图片不成比例。 动画之前: 动画后: 猜猜为什么会这样

    • 本文向大家介绍当一个元素被设置为浮动后,它的display值变为什么呢?相关面试题,主要包含被问及当一个元素被设置为浮动后,它的display值变为什么呢?时的应答技巧和注意事项,需要的朋友参考一下 一个元素被设为绝对定位或者浮动后,其display计算值就变为了block,尽管其表现形式和inline-block类似——包裹内部元素且不超出包含块的特性。按照如下方式在控制台尝试可验证: var

    • 问题内容: 我尝试使用下面的代码将命令输出存储在数组中,但是在“ while循环”之后无法打印数组元素,这意味着在代码的最后一行中,我的代码是否存在任何问题? 问题答案: 问题是您在 子 外壳中添加了元素。详细说明: 导致在子shell中执行,这是一个单独的执行环境。这意味着设置的变量不适用于 当前 外壳,其执行环境不会受到影响。您可以改为使用流程替代来实现相同目的: 请注意,不建议解析。尝试使用