突出显示UIControl子类

use*_*773 18 iphone highlighting uibutton uiimageview uicontrol


基本上我需要一个图像按钮,特别是一个自定义对象:
1)在点击时调用控制器的动作
2)封装自定义数据
3)由包装器视图自动移动(不相关)

好吧,我用一个子类得到了所有这些UIControl(因为UIButton不建议使用子类化UIImageView,并且子类化很难管理第1点).但现在突出它的正确方法是什么?我想以任何方式点击控件(即使是简单的alpha瞬间减少).

随着beginTrackingWithTouchendTrackingWithTouch我无法识别唯一的UIControlEventTouchUpInside事件.

控制器中的视图动画?在我看来,这是一个粗略的解决方案

有一个简单而直接的解决方案吗?

谢谢 :(

Cos*_*que 36

我认为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;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您有任何子视图,请不要忘记设置mySubview.userInteractionEnabled = NO(否则将不会注册tap并且不会触发突出显示). (6认同)

Loi*_*all 18

为了使这个答案保持最新,这里是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.
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能还想淡化UIControl的调光.要做到这一点,只需将alpha分配放在动画块中,就像这样

override var isHighlighted: Bool {
    didSet {
        UIView.animate(withDuration: 0.25) {
            self.alpha = self.isHighlighted ? 0.6 : 1.0
        }
    }
}
Run Code Online (Sandbox Code Playgroud)