gpt4 book ai didi

swift - 将 CALayer 作为子层添加到 UIImage 时出现意外行为

转载 作者:行者123 更新时间:2023-11-28 06:26:09 26 4
gpt4 key购买 nike

我有带有自定义单元格的 tableView。每个单元格都有属性“名称”和“图像”。我想要做的是在图像周围添加边框。这部分有效。但是当我尝试将 backgroundColor 添加到 CALayer 时,我在 tableView 中看到的只是没有 UIImage 的 CALayer。

这里是用于更好理解的代码和设置背景颜色的示例。

 @IBOutlet weak var channelImage: UIImageView! {
didSet {
let borderLayer = CALayer()
let borderFrame = CGRect(x: -4, y: -4, width: channelImage.frame.size.width+8, height: channelImage.frame.size.width+8)
borderLayer.frame = borderFrame
borderLayer.cornerRadius = 4
borderLayer.borderWidth = 0.5
borderLayer.borderColor = UIColor.lightGray.cgColor
channelImage.layer.insertSublayer(borderLayer, at: 0)
channelImage.layer.masksToBounds = false
borderLayer.backgroundColor = UIColor.lightGray.cgColor
self.channelImage.layoutIfNeeded()
self.channelImage.layoutSubviews()
}
}

没有背景色:

@IBOutlet weak var channelImage: UIImageView! {
didSet {
let borderLayer = CALayer()
let borderFrame = CGRect(x: -4, y: -4, width: channelImage.frame.size.width+8, height: channelImage.frame.size.width+8)
borderLayer.frame = borderFrame
borderLayer.cornerRadius = 4
borderLayer.borderWidth = 0.5
borderLayer.borderColor = UIColor.lightGray.cgColor
channelImage.layer.insertSublayer(borderLayer, at: 0)
channelImage.layer.masksToBounds = false
self.channelImage.layoutIfNeeded()
self.channelImage.layoutSubviews()
}
}

这里还有引用第一个和第二个例子的图片:

enter image description here

enter image description here

我做了很多搜索,但没有找到适合我的情况的答案。

这里是这个Cell的完整代码

class ChannelCell: UITableViewCell, ChannelSettable {

static let reusableID = "channelCell"

var channel: Channel? = nil {
didSet {
self.channelName.text = channel?.channelName ?? ""
self.channelImage.image = UIImage(named: channel?.channel ?? "") ?? UIImage(named: "TV")
self.channelCategory.text = channel?.chCategory ?? ""
}
}

@IBOutlet weak var channelName: UILabel!
@IBOutlet weak var channelCategory: UILabel!
@IBOutlet weak var channelImage: UIImageView! {
didSet {
let borderLayer = CALayer()
let borderFrame = CGRect(x: -4, y: -4, width: channelImage.frame.size.width+8, height: channelImage.frame.size.width+8)
borderLayer.frame = borderFrame
borderLayer.cornerRadius = 4
borderLayer.borderWidth = 0.5
borderLayer.borderColor = UIColor.lightGray.cgColor
borderLayer.backgroundColor = UIColor.lightGray.cgColor
channelImage.layer.insertSublayer(borderLayer, at: 0)
channelImage.layer.masksToBounds = false
}
}

override func awakeFromNib() {
super.awakeFromNib()
self.channelName.font = DesignHelper.channelNameFont
self.channelCategory.font = DesignHelper.channelCategoryFont
self.layoutIfNeeded()
}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}

最佳答案

您可以像这样直接向 UIImageView 的图层添加边框:

channelImage.layer.borderWidth = 0.5
channelImage.layer.borderColor = UIColor.lightGray.cgColor

您不必费心使用额外的层来做到这一点。

但是,如果您仍然需要添加一个额外的 CALayer,请尝试使用这些方法:

func insertSublayer(CALayer, above: CALayer?)
func insertSublayer(CALayer, below: CALayer?)

关于swift - 将 CALayer 作为子层添加到 UIImage 时出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com