为 UIButton 添加发光效果 - iOS
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11556208/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Adding glow effect to UIButton - iOS
提问by Siddharthan Asokan
I have an UIButton which is a logo. This logo button will glow on forever but will stop glowing on touch.It is like a glowing animation.
我有一个 UIButton,它是一个标志。此徽标按钮将永远发光,但在触摸时会停止发光。它就像一个发光的动画。
Is there any suggestions?
有什么建议吗?
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_CABasicAnimation", referenced from:
objc-class-ref in UIView+Glow.o
"_OBJC_CLASS_$_CAMediaTimingFunction", referenced from:
objc-class-ref in UIView+Glow.o
"_kCAMediaTimingFunctionEaseInEaseOut", referenced from:
-[UIView(Glow) startGlowing] in UIView+Glow.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
回答by YaDa
I like this glow + grow/shrink animation for my 'extra special' buttons:
我喜欢我的“额外特殊”按钮的这种发光 + 增长/收缩动画:
-(void)makeViewShine:(UIView*) view
{
view.layer.shadowColor = [UIColor yellowColor].CGColor;
view.layer.shadowRadius = 10.0f;
view.layer.shadowOpacity = 1.0f;
view.layer.shadowOffset = CGSizeZero;
[UIView animateWithDuration:0.7f delay:0 options:UIViewAnimationOptionAutoreverse | UIViewAnimationCurveEaseInOut | UIViewAnimationOptionRepeat | UIViewAnimationOptionAllowUserInteraction animations:^{
[UIView setAnimationRepeatCount:15];
view.transform = CGAffineTransformMakeScale(1.2f, 1.2f);
} completion:^(BOOL finished) {
view.layer.shadowRadius = 0.0f;
view.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
}];
}
回答by apouche
I suggest you use the Glow Category of UIView made by secret lab.
我建议你使用秘密实验室制作的 UIView的Glow 类别。
Example is available here
示例可在此处获得
回答by Rok Jarc
Glowing code taken from: Creating a Glow Effect for UILabel and UIButton
发光代码取自:为 UILabel 和 UIButton 创建发光效果
First, you'll need to import the QuartzCore Framework:
首先,您需要导入 QuartzCore 框架:
#import <QuartzCore/QuartzCore.h>
When you create a button (or in viewDidLoad
, depends on your code structure) add
this code:
创建按钮时(或在 中viewDidLoad
,取决于您的代码结构)添加以下代码:
UIColor *color = button.currentTitleColor;
button.titleLabel.layer.shadowColor = [color CGColor];
button.titleLabel.layer.shadowRadius = 4.0f;
button.titleLabel.layer.shadowOpacity = .9;
button.titleLabel.layer.shadowOffset = CGSizeZero;
button.titleLabel.layer.masksToBounds = NO;
You'll need to watch for two events: UIControlEventTouchDown
and UIControlEventTouchUpInside
您需要注意两个事件:UIControlEventTouchDown
和UIControlEventTouchUpInside
In UIControlEventTouchDown
handler you'll add the code:
在UIControlEventTouchDown
处理程序中,您将添加代码:
UIColor *color = [UIColor clearColor];
button.titleLabel.layer.shadowColor = [color CGColor];
And in UIControlEventUpInside
handler you'll add the code:
在UIControlEventUpInside
处理程序中,您将添加代码:
UIColor *color = button.currentTitleColor;
button.titleLabel.layer.shadowColor = [color CGColor];
Again details of implementation depend on whether you create button programmaticaly or via Interface Builder but i'm sure you'll be able to figure this out from here on.
同样,实现的细节取决于您是通过编程方式还是通过 Interface Builder 创建按钮,但我相信您将能够从这里弄清楚这一点。
EDIT: for a custom button simply adding the following code should work:
编辑:对于自定义按钮,只需添加以下代码即可:
[button setImage:[UIImage imageNamed:@"buttonWithGlow.png"]
forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"buttonWithNoGlow.png"]
forState:UIControlStateHighlighted];
回答by alegelos
Swift 5
斯威夫特 5
Create UIView extension with the animation
Use it on textfields, buttons, views (any subclass of UIView)
使用动画创建 UIView 扩展
在文本字段、按钮、视图(UIView 的任何子类)上使用它
Note: you may change values and play around to get the effect you need.
注意:您可以更改值并进行操作以获得所需的效果。
UIView extension
UIView 扩展
import UIKit
extension UIView {
enum GlowEffect: Float {
case small = 0.4, normal = 2, big = 15
}
func doGlowAnimation(withColor color: UIColor, withEffect effect: GlowEffect = .normal) {
layer.masksToBounds = false
layer.shadowColor = color.cgColor
layer.shadowRadius = 0
layer.shadowOpacity = 1
layer.shadowOffset = .zero
let glowAnimation = CABasicAnimation(keyPath: "shadowRadius")
glowAnimation.fromValue = 0
glowAnimation.toValue = effect.rawValue
glowAnimation.beginTime = CACurrentMediaTime()+0.3
glowAnimation.duration = CFTimeInterval(0.3)
glowAnimation.fillMode = .removed
glowAnimation.autoreverses = true
glowAnimation.isRemovedOnCompletion = true
layer.add(glowAnimation, forKey: "shadowGlowingAnimation")
}
}
How to use it:
如何使用它:
//TextField with border
textField.doGlowAnimation(withColor: UIColor.red, withEffect: .big)
//Label
label.doGlowAnimation(withColor: label.textColor, withEffect: .small)
//Button
button.doGlowAnimation(withColor: UIColor.red, withEffect: .big)
回答by abdul sathar
Here is my answer....
这是我的答案......
Using categories
使用类别
/* ****FAQ?
1.how to add glow effect on uibutton?
[UIButton glowUIButton:playButton];
2.how to remove effect on uibutton?
[UIButton removeGlowUIButton:playButton];
Ends*** */
#import <UIKit/UIKit.h>
@interface UIButton (BlinkEffect)
//blink effect category
+( void) glowUIButton:(UIButton *)inputButton;
//remove blink effect
+(void) removeGlowUIButton:(UIButton *)inputButton;
@end
#import "UIButton+BlinkEffect.h"
@implementation UIButton (BlinkEffect)
+(void) glowUIButton:(UIButton *)inputButton
{
//add blink effect
CALayer *viewLayer = inputButton.layer;
viewLayer.shadowOffset = CGSizeMake(0,0);
CGFloat radius = CGRectGetWidth(inputButton.bounds)/2.0;
viewLayer.shadowColor = [[UIColor whiteColor] CGColor];
viewLayer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(-7,-5.5, 2.5 * (radius), 2.5 * radius) cornerRadius:radius].CGPath;
viewLayer.shadowRadius = 5.0f;
viewLayer.shadowOpacity = 1.0f;
//Let's animate it while we're at it.
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"shadowOpacity"];
animation.duration =0.7;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.fromValue = [NSNumber numberWithFloat:1.0];
animation.toValue = [NSNumber numberWithFloat:0.0];
animation.autoreverses = YES;
animation.repeatCount = 1.0 / 0.0;
[viewLayer addAnimation:animation forKey:@"shadowOpacity"];
}
+(void)removeGlowUIButton:(UIButton *)inputButton
{
CALayer *viewLayer = inputButton.layer;
viewLayer.shadowColor = [[UIColor clearColor] CGColor];
[viewLayer removeAnimationForKey:@"shadowOpacity"];
}
@end