我有一个动态创建的标签列表,我使用GestureRecognizer
为每个标签检测触摸/点击它们。我无法使用UIButton
,因为我想将每个标签唯一的文本传递给触摸事件处理程序,UIButton
不允许将文本作为userinfo
传递。我无法使用UIButton.tag
传递其他信息。
现在,我希望UIButton
触摸UIlabel
之类的发光效果。如果有其他方式通知用户标签被触摸,那也是如此。我也在考虑使用某种快速动画或摇晃效果。任何想法或解决方法?
提前致谢。
答案 0 :(得分:0)
为什么不以编程方式创建按钮并将按钮类型设置为自定义。像这样 -
UIButton *sampleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[sampleButton setBackgroundImage:[[UIImage imageNamed:@"redButton.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0] forState:UIControlStateNormal];
[sampleButton setTitle:@"My Button"];
[sampleButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:sampleButton];
这里我们已经定义了按钮的外观UIControlStateNormal
。您可以定义UIControlStateHighlighted
的外观。
我想说的是使用uibutton可以得到你需要的东西。不必使用uilabels。
答案 1 :(得分:0)
Swift 4
1-使用动画创建UIView扩展
2-在文本字段,按钮,视图(UIView的任何子类)上使用它
UIView扩展
import UIKit
extension UIView{
enum GlowEffect:Float{
case small = 0.4, normal = 1, big = 5
}
func doGlowAnimation(withColor color:UIColor, withEffect effect:GlowEffect = .normal) {
layer.masksToBounds = false
layer.shadowColor = color.cgColor
layer.shadowRadius = 0
layer.shadowOpacity = effect.rawValue
layer.shadowOffset = .zero
let glowAnimation = CABasicAnimation(keyPath: "shadowRadius")
glowAnimation.fromValue = 0
glowAnimation.toValue = 1
glowAnimation.beginTime = CACurrentMediaTime()+0.3
glowAnimation.duration = CFTimeInterval(0.3)
glowAnimation.fillMode = kCAFillModeRemoved
glowAnimation.autoreverses = true
glowAnimation.isRemovedOnCompletion = true
layer.add(glowAnimation, forKey: "shadowGlowingAnimation")
}
}
如何使用它:
//Button
button.doGlowAnimation(withColor: UIColor.red, withEffect: .big)