【问题标题】:animate a transformed UIImageView?为转换后的 UIImageView 设置动画?
【发布时间】:2013-11-13 18:20:15
【问题描述】:

我正在尝试在创建自定义控件时学习一些动画。我在这里完成了一个很棒的教程: 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

我换行了

im.transform = CGAffineTransformMakeRotation(angleSize*i);

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

考虑现在的位置是 -pi / 2

接下来我要做的就是让选中的丁香变大变小;这将发生在 2 个不同的场合;一次,当车轮加载时,以及当关闭通过所选位置时。这里我有点卡住了。

我写了以下方法:

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

    [UIView animateWithDuration:1.0 动画:^{ v.transform = CGAffineTransformMakeScale(1.3, 1.3); } 完成:^(布尔完成){ [UIView animateWithDuration:1.0 动画:^{ v.transform = CGAffineTransformMakeScale(1.0, 1.0); }]; }];

    }

我首先在初始化 clove 的 initWheel 方法中调用它:

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

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

  • (void) findViewandGrowImage : (int) 标签 { for (id myArrayElement in self.container.subviews) { UIImageView *v = myArrayElement; if (v.tag == 标签){ [自我成长图像:v]; 休息; } } }

我在其中调用 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

因此,设置 alpha 值后:

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

对于我做错的事情,我在某个地方存在根本的脱节;第一种情况很好;第二种情况使丁香在轮子上旋转到不同的扇区并生长和收缩……我不知道为什么。我很乐意提供任何意见。

谢谢。

【问题讨论】:

  • 我真的不明白你想看到你的第二个案例。

标签: rotation ios7 core-animation uiviewanimation cabasicanimation


【解决方案1】:

如果你有一个变换:

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);
 } 

【讨论】:

  • 谢谢,这帮助我走上了正轨。我不得不移除完成块并使用带有角度调整的变换。
猜你喜欢
  • 1970-01-01
  • 2012-09-23
  • 2017-12-10
  • 2011-06-13
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多