0

我正在尝试在创建自定义控件时学习一些动画。我在这里完成了一个很棒的教程: 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); } 完成:^(BOOL 完成){ [UIView animateWithDuration:1.0 动画:^{ v.transform = CGAffineTransformMakeScale(1.0, 1.0); }]; }];

    }

我首先在初始丁香被设置的 initWheel 方法中调用它:

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

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

  • (void) findViewandGrowImage : (int) tag { for (id myArrayElement in self.container.subviews) { UIImageView *v = myArrayElement; if (v.tag == tag ){ [self growImage : v]; 休息; } } }

我在 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

因此,在设置 alpha 值后:

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

对我来说,我做错了什么有一个根本的脱节;第一种情况很好;第二种情况使丁香在轮子上旋转到不同的扇区并生长和收缩……我不知道为什么。我喜欢任何输入。

谢谢你。

4

1 回答 1

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);
 } 
于 2013-11-02T20:40:45.037 回答