UIImageView 动画从左到右

Posted

技术标签:

【中文标题】UIImageView 动画从左到右【英文标题】:UIImageView animation from left to right 【发布时间】:2011-06-19 12:57:43 【问题描述】:

我想将我的UIImageView 从左向右移动,反之亦然。我使用以下代码完成了一半:

[UIView setAnimationDuration:1.0];
[UIView setAnimationRepeatCount:10];
[UIView setAnimationRepeatAutoreverses:YES];

CGPoint pos = mover.center;
pos.x = 100.0f;
mover.center = pos;

[UIView commitAnimations];

其中moverUIImageView。我面临的问题是我无法将它完全从左向右移动。上面的代码只是将它从右移到中心。我想从中心往左走。有人可以指导我吗?

【问题讨论】:

【参考方案1】:

我不认为UIKit 动画为您提供直接的关键帧动画来获得振荡效果。我们可以尝试通过一个接一个地触发动画来使用委托来实现它,但它没有CAKeyframeAnimation那么有效。要使用它,您必须在项目中包含QuartzCore 框架和#import <QuartzCore/QuartzCore.h>。你可以通过做这样的事情来实现你的振荡效果,

self.mover.center = CGPointMake(160, 240);

CAKeyframeAnimation *animation;

animation = [CAKeyframeAnimation animationWithKeyPath:@"position.x"];
animation.duration = 3.0f;
animation.repeatCount = 10;
animation.values = [NSArray arrayWithObjects:
                    [NSNumber numberWithFloat:160.0f],
                    [NSNumber numberWithFloat:320.0f],
                    [NSNumber numberWithFloat:160.0f],
                    [NSNumber numberWithFloat:0.0f],
                    [NSNumber numberWithFloat:160.0f], nil]; 
animation.keyTimes = [NSArray arrayWithObjects:
                      [NSNumber numberWithFloat:0.0],
                      [NSNumber numberWithFloat:0.25],
                      [NSNumber numberWithFloat:.5], 
                      [NSNumber numberWithFloat:.75],
                      [NSNumber numberWithFloat:1.0], nil];    

animation.removedOnCompletion = NO;

[self.mover.layer addAnimation:animation forKey:nil];

这段代码的 sn-p 使视图从左到右摆动,非常接近您的描述,但要获得您想要的确切效果,您可能需要稍作更改。

【讨论】:

这只是一个例子,我实际上并没有为 x pos 设置 100,而且这个答案没有帮助,因为我想左右移动它。你刚刚解释了我已经做过的一侧运动:( @Wasim 您的问题没有提到根本没有动画。所以我误解了你的要求。更新了我的答案。 @Deepak 感谢您的回复 :) 但您仍然误解了我的问题 :) 我说我完成了一半的动画,这意味着我可以将我的 UIViewImage 从中心到右或左设置动画。但我的主要动机是从屏幕中心开始动画,然后将其首先移动到最左边,然后再移动到最右边。我希望我的问题现在对你来说更清楚了 :) 很抱歉再次打扰你 :) 首先很抱歉回复得很晚,因为我正忙于一个 .Net 项目:) 非常感谢 Deepak,你的代码运行良好,它帮助了我很多我想做的事情:)但是,我会管理它,并且会为我所用。再次感谢..! @Deepak 有没有什么办法可以在完成上述动画后使用上面的代码做更多的动画?【参考方案2】:

假设你可以针对ios4,这可以通过

   typedef void (^completionBlock)(BOOL);
   completionBlock moveToExtremeRight = ^(BOOL finished)
       // animate, with repetition, from extreme left to extreme right 
       [UIView animateWithDuration:2.0 // twice as long!
                          delay:0.0
                         options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionRepeat|UIViewAnimationAutoReverse
                     animations:^
                          mover.transform = CGAffineTransformMakeTranslation(100, 0);
                     
                     completion:nil
       ];
   ;
   mover.transform = CGAffineTransformIdentity;
   // animate once, to the extreme left
   [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationOptionAllowUserInteraction
                     animations:^
                          // or whatever is appropriate 'extreme left'
                          mover.transform = CGAffineTransformMakeTranslation(-100, 0);
                     
                     // on completion, start a repeating animation
                     completion:moveToExtremeRight
   ];

【讨论】:

【参考方案3】:

您应该考虑设置转换,而不是设置中心。使用中心设置中心,这意味着您必须根据图像大小正确计算中心。

要将其向左移动,请将变换设置为 -320 的平移。要将其移回,请将其设置为身份转换。

【讨论】:

以上是关于UIImageView 动画从左到右的主要内容,如果未能解决你的问题,请参考以下文章

从左到右平滑地重复动画

核心动画从左到右

iOS 用从左到右的动画取消隐藏视图

iPhone:如何从左到右制作当前的模态视图控制器动画

Android 从左到右滑动动画

精灵动画从左到右,我应该选择啥?动态的还是运动的?