基本上,我需要一个图像按钮,特别是一个自定义对象:
1)点击时调用控制器的操作
2)封装自定义数据
3)由包装器视图自动移动(不相关)
嗯,我用UIControl的一个子类得到了所有这些(因为不推荐对UIButton进行子类化,而对UIImageView进行子类化会使管理第1点变得困难)。但是,现在突出显示它的正确方式是什么?我想要在以任何方式点击时突出显示控件(即使是简单的alpha的瞬间减少)。
使用beginTrackingWithTouch和endTrackingWithTouch,我无法识别唯一的UIControlEventTouchUpInside事件。
控制器中的视图动画?在我看来,这是一个粗略的解决方案
有没有简单而直接的解决方案?
谢谢:(
发布于 2010-12-13 19:48:10
我认为UIControls会根据触摸事件自动正确地设置其突出显示的属性。您需要的是覆盖-setHighlighted:方法来实现特定的算法:
- (void) setHighlighted: (BOOL) highlighted {
[super setHighlighted: highlighted];
// Only as an example. Caution: looks like a disabled control
self.alpha = highlighted ? 0.5f : 1.0f;
}发布于 2015-09-22 06:46:36
为了使这个答案保持最新,这里是Swift的版本(Costique的答案)。
override var isHighlighted: Bool {
didSet {
alpha = self.isHighlighted ? 0.6 : 1.0 // Sets alpha to 0.6 if highlighted, or 1.0 if it's not.
}
}您可能还希望淡出UIControl的暗淡效果。为此,只需将alpha赋值放在动画块中,如下所示
override var isHighlighted: Bool {
didSet {
UIView.animate(withDuration: 0.25) {
self.alpha = self.isHighlighted ? 0.6 : 1.0
}
}
}发布于 2016-06-20 21:49:56
要正确高亮显示UIControl的子视图,您可以使用自定义色调颜色。要启用此功能,您应该在init方法或awakeFromNib中的某个位置将图像呈现模式更改为always template:
self.imageView.image = [self.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.backgroundImageView.image = [self.backgroundImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.tintColor = [UIColor zst_blueColor]; // Use custom instead of system-defined color因此,我们可以改变alpha的颜色,而不是改变tint的值,它会自动改变它的UIImageView子视图。在setHighlighted:方法中,可以将文本和色调颜色更改为更深的颜色:
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
UIColor *tintColor = highlighted ? [UIColor zst_darkerBlueColor] : [UIColor zst_blueColor];
self.tintColor = tintColor;
self.titleLabel.textColor = tintColor;
}https://stackoverflow.com/questions/4428437
复制相似问题