首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用adjustsImageWhenHighlighted设置UIButtonConfiguration

用adjustsImageWhenHighlighted设置UIButtonConfiguration
EN

Stack Overflow用户
提问于 2022-10-04 20:05:32
回答 1查看 206关注 0票数 0

既然adjustsImageWhenHighlighted在iOS 15.0中被否决了,那么用UIButtonConfiguration设置它的方法是什么呢?如果我直接设置它,我会收到一条消息:“您可以定制,以便通过configurationUpdateHandler复制此行为”,但是我应该做什么来在configurationUpdateHandler中设置它呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-05 13:34:07

这是最基本的。

假设您有“正常”和“突出显示”图像:

代码语言:javascript
运行
复制
    // let's use new UIButton.Configuration
    newButton.configuration = .plain()
    
    newButton.configurationUpdateHandler = { button in
        var config = button.configuration
        config?.image = button.isHighlighted ? imgHighlighted : imgNormal
        button.configuration = config
    }

下面是一个可运行的示例,它使用UIGraphicsImageRenderer创建按钮图像的“黑暗”版本“动态”:

代码语言:javascript
运行
复制
class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        guard let imgNormal = UIImage(named: "myButtonImage")
        else {
            print("Could not load images!")
            return
        }
        
        // generate a "darkened" version of the image
        let rndr = UIGraphicsImageRenderer(size: imgNormal.size)
        let imgHighlighted = rndr.image { (ctx) in
            imgNormal.draw(at: .zero)
            UIColor.black.withAlphaComponent(0.5).setFill()
            ctx.cgContext.fill(CGRect(origin: .zero, size: imgNormal.size))
        }
        
        let oldButton = UIButton()
        let newButton = UIButton()

        // "standard" button
        oldButton.setImage(imgNormal, for: [])
        // default is .adjustsImageWhenHighlighted = true
        
        // let's use new UIButton.Configuration
        newButton.configuration = .plain()
        
        newButton.configurationUpdateHandler = { button in
            var config = button.configuration
            config?.image = button.isHighlighted ? imgHighlighted : imgNormal
            button.configuration = config
        }
        
        [oldButton, newButton].forEach { b in
            b.translatesAutoresizingMaskIntoConstraints = false
            view.addSubview(b)
        }
        
        let g = view.safeAreaLayoutGuide
        NSLayoutConstraint.activate([
            
            oldButton.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0),
            oldButton.widthAnchor.constraint(equalToConstant: 80.0),
            oldButton.heightAnchor.constraint(equalTo: oldButton.widthAnchor),
            oldButton.centerXAnchor.constraint(equalTo: g.centerXAnchor),
            
            newButton.topAnchor.constraint(equalTo: oldButton.bottomAnchor, constant: 20.0),
            newButton.widthAnchor.constraint(equalTo: oldButton.widthAnchor),
            newButton.heightAnchor.constraint(equalTo: oldButton.widthAnchor),
            newButton.centerXAnchor.constraint(equalTo: g.centerXAnchor),
            
        ])
        
    }
    
}

当您运行这个按钮时,这两个按钮的外观和功能应该相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73953128

复制
相关文章

相似问题

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