如何在 ios sdk 中通过动画增加和减少图像的 alpha 值?

Posted

技术标签:

【中文标题】如何在 ios sdk 中通过动画增加和减少图像的 alpha 值?【英文标题】:how to increase and decrease the image alpha value with animation in ios sdk? 【发布时间】:2013-09-06 12:32:38 【问题描述】:

在这段代码中,我使用的是动画。但有时我还需要更改图像的 alpha 值。

-(void)animation

    CGPoint point = CGPointMake(imgView.frame.origin.x, imgView.frame.origin.y);
    imgView.layer.position = point;
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position.x"];
    anim.fromValue  = [NSValue valueWithCGPoint:point];
    anim.toValue    = [NSValue valueWithCGPoint:CGPointMake(point.x + 50, point.y)];
    anim.duration   = 10.0f;
    anim.repeatCount =1;
    anim.removedOnCompletion = YES;

    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

    [imgView.layer addAnimation:anim forKey:@"position.x"];
    imgView.layer.position = point;

【问题讨论】:

【参考方案1】:

您可以使用CABasicAnimationopacity 键来执行此操作:

CABasicAnimation *alphaAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
alphaAnimation.fromValue = [NSNumber numberWithFloat:1.0];
alphaAnimation.toValue = [NSNumber numberWithFloat:0.0];
[imgView.layer addAnimation:alphaAnimation forKey:@"opacity"];

编辑:

要通过指定值设置动画,您可以使用CAKeyframeAnimation:

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
    animation.duration = 10.0f;
    animation.repeatCount = 1;
    animation.values  =  [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:1.0,
                          [NSNumber numberWithFloat:0.5],
                          [NSNumber numberWithFloat:1.0],nil];
    animation.keyTimes = [NSArray arrayWithObjects:
                          [NSNumber numberWithFloat:0.0],
                          [NSNumber numberWithFloat:5.0],
                          [NSNumber numberWithFloat:10.0], nil];
    [imgView.layer addAnimation:animation forKey:@"opacity"];

【讨论】:

谢谢你的建议。现在我明白了。 @user2545298:很高兴:) hi..另外一个要求是当图像改变时,它的 x 位置 alpha 值应该减小,这意味着图像会更亮。之后它来到下一个位置图像应该更亮。如果您有任何解决方案分享给我,请提前感谢。 @user2545298:我修改了答案,请检查 我不知道自发布此答案以来是否已更改。但是 keyTimes 是一个相对标准化的值数组。数组中的每个值都是 [0,1] 范围内的浮点数。所以上面的三个keyTimes应该是[0, .5, 1]。【参考方案2】:

为了在视图的 x 位置移动的同时/速率降低 alpha,只需将位置设置代码与 alpha 设置代码放在同一动画块中,如下所示:

CGPoint finalPoint = CGPointMake(500, imgView.center.y); //change for any final point you want
CGFloat finalAlpha = 0.0; //change the final alpha as you want
UIView animateWithDuration:1.0 animations:^ //change the duration as you want
   imgView.alpha = finalAlpha; 
   imgView.center = finalPoint;
];

【讨论】:

【参考方案3】:

这会在 500 毫秒内“消失”self.view

您在调用它之前所做的任何事情都将“立即”设置,您在“动画”块中设置的所有内容(例如设置新的帧坐标)都将在指定的持续时间内进行插值。

        [UIView animateWithDuration:0.50
                              delay:0.0
                            options:(   UIViewAnimationOptionAllowUserInteraction
                                     |  UIViewAnimationOptionBeginFromCurrentState
                                     |  UIViewAnimationOptionCurveEaseInOut)

                         animations:^ 
                             self.view.alpha = 0.0f ;
                         

                         completion: ^(BOOL)
                             [self.view removeFromSuperview] ;
                             self.view = nil ;
                         
         ] ;

【讨论】:

【参考方案4】:

您可以使用CABasicAnimation 对象(不同的对象,因为您将为不同的 KeyPath 设置动画,即alpha)并使用NSNumbersfromValuetoValue

另一种(也是最简单的)方法是使用专用于动画的UIView 辅助方法(animateWithDuration:… 和所有),特别是如果您必须同时为多个属性设置动画(您可以同时为frame 设置动画)和 alpha 具有相同的动画块,如果它符合您的需要并简化您的代码)。

您还可以将 CABasicAnimation 用于帧和 [UIView animateWithDuration:…] 用于 alpha,根据您的动画是否复杂并需要自定义(自定义计时功能、非线性动画等)或不是。

【讨论】:

【参考方案5】:
//your code of changing x position will be here 

现在实现我写在下面的代码。

 UIView animateWithDuration:1.0 animations:^
imgView.alpha = 0.5;//must be in between 0 to 1
 ];

现在当你的图像视图移动到你所说的下一个位置时,写下面的代码

//下一个位置的图像视图代码.. 现在实现下面的代码...

 UIView animateWithDuration:0.5 animations:^
imgView.alpha = 1.0;//must be in between 0 to 1
 ];

让我知道它是否有效!!!!希望对你有帮助...

编码愉快!!!

【讨论】:

嗨..我的要求是当图像发生变化时,它的 x 位置 alpha 值应该减小,这意味着图像会更亮。之后它来到下一个位置图像应该更亮。如果您有任何解决方案分享给我,请提前感谢。

以上是关于如何在 ios sdk 中通过动画增加和减少图像的 alpha 值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中通过 Twitter API 获取用户电子邮件地址?

如何在 Edge 和 IE 中通过单击 SVG 形状来实现动画

如何在 iOS 中通过 UIActivityViewController 导出 PHAsset 视频

如何在 Flash AS3 中通过鼠标单击暂停多个符号

如何在浏览器中通过 Javascript 压缩图像?

如何在控制器laravel 8中通过ajax传递路由链接和图像存储链接