首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突出显示UIControl子类

突出显示UIControl子类
EN

Stack Overflow用户
提问于 2010-12-13 19:41:20
回答 3查看 9.3K关注 0票数 21

基本上,我需要一个图像按钮,特别是一个自定义对象:

1)点击时调用控制器的操作

2)封装自定义数据

3)由包装器视图自动移动(不相关)

嗯,我用UIControl的一个子类得到了所有这些(因为不推荐对UIButton进行子类化,而对UIImageView进行子类化会使管理第1点变得困难)。但是,现在突出显示它的正确方式是什么?我想要在以任何方式点击时突出显示控件(即使是简单的alpha的瞬间减少)。

使用beginTrackingWithTouchendTrackingWithTouch,我无法识别唯一的UIControlEventTouchUpInside事件。

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

有没有简单而直接的解决方案?

谢谢:(

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-13 19:48:10

我认为UIControls会根据触摸事件自动正确地设置其突出显示的属性。您需要的是覆盖-setHighlighted:方法来实现特定的算法:

代码语言:javascript
复制
- (void) setHighlighted: (BOOL) highlighted {
    [super setHighlighted: highlighted];
    // Only as an example. Caution: looks like a disabled control
    self.alpha = highlighted ? 0.5f : 1.0f;
}
票数 39
EN

Stack Overflow用户

发布于 2015-09-22 06:46:36

为了使这个答案保持最新,这里是Swift的版本(Costique的答案)。

代码语言:javascript
复制
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赋值放在动画块中,如下所示

代码语言:javascript
复制
override var isHighlighted: Bool {
    didSet {
        UIView.animate(withDuration: 0.25) {
            self.alpha = self.isHighlighted ? 0.6 : 1.0
        }
    }
}
票数 21
EN

Stack Overflow用户

发布于 2016-06-20 21:49:56

要正确高亮显示UIControl的子视图,您可以使用自定义色调颜色。要启用此功能,您应该在init方法或awakeFromNib中的某个位置将图像呈现模式更改为always template

代码语言:javascript
复制
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:方法中,可以将文本和色调颜色更改为更深的颜色:

代码语言:javascript
复制
- (void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    UIColor *tintColor = highlighted ? [UIColor zst_darkerBlueColor] : [UIColor zst_blueColor];
    self.tintColor = tintColor;
    self.titleLabel.textColor = tintColor;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4428437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档