如何在 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】:您可以使用CABasicAnimation
的opacity
键来执行此操作:
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
)并使用NSNumbers
为fromValue
和toValue
。
另一种(也是最简单的)方法是使用专用于动画的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 形状来实现动画