向UIButton添加发光效果-iOS
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向UIButton添加发光效果-iOS相关的知识,希望对你有一定的参考价值。
我有一个UIButton,它是一个徽标。此徽标按钮将永远发光,但触摸时将停止发光,就像发光的动画一样。
有什么建议吗?
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)
答案
我建议您使用Glow Category of UIView made by secret lab。
示例可用here
另一答案
我喜欢我的“特别”按钮的发光+成长/收缩动画:
-(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);
];
另一答案
发光代码取自:Creating a Glow Effect for UILabel and UIButton
首先,您需要导入QuartzCore框架:
#import <QuartzCore/QuartzCore.h>
创建按钮时(或在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;
您需要注意两个事件:UIControlEventTouchDown
和UIControlEventTouchUpInside
在UIControlEventTouchDown
处理程序中,将添加代码:
UIColor *color = [UIColor clearColor];
button.titleLabel.layer.shadowColor = [color CGColor];
并且在UIControlEventUpInside
处理程序中,将添加代码:
UIColor *color = button.currentTitleColor;
button.titleLabel.layer.shadowColor = [color CGColor];
具体的实现细节取决于您是通过编程方式还是通过Interface Builder创建按钮,但我敢肯定,您可以从这里开始弄清楚这一点。
编辑:对于自定义按钮,只需添加以下代码即可:
[button setImage:[UIImage imageNamed:@"buttonWithGlow.png"]
forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"buttonWithNoGlow.png"]
forState:UIControlStateHighlighted];
另一答案
Swift 5
使用动画创建UIView扩展
在文本字段,按钮,视图(UIView的任何子类)上使用它
注意:您可以更改值并四处玩耍以获得所需的效果。
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")
使用方法:
//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)
另一答案
这是我的答案。...
使用类别
/* ****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
以上是关于向UIButton添加发光效果-iOS的主要内容,如果未能解决你的问题,请参考以下文章