gpt4 book ai didi

ios - 如何创建一个自己四舍五入的 UIImageView 扩展

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

我最近遇到了一个恼人的问题。

假设我想在我的应用程序的多个位置使用一个图像,并且必须在所有位置圆角以便成为一个圆。因为我希望我的代码干净,所以我认为这个功能(舍入本身)应该放在内部扩展 UIImageView 的类中。我创建了一个简单的类来覆盖 Storyboard构造函数并负责正确设置 cornerRadius:

class RoundedImageView: UIImageView {


required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.layer.cornerRadius = self.frame.size.width/2
self.layer.borderColor = UIColor.redColor().CGColor
self.layer.borderWidth = 2
self.layer.masksToBounds = true
}
}

对于像这样的约束

  • 宽度:100,

  • 高度:100

    这显然有效,因为调用构造函数后框架没有改变(因为它在 Storyboard 中具有正确的尺寸)。例如,当约束看起来像这样时,就会出现问题:

  • 宽度等于父 View 的 0.5

  • 纵横比:1:1

因为调用构造函数后框架发生变化。

我最后做的是这样的:

override func viewDidLayoutSubviews(){
super.viewDidLayoutSubviews()
myRoundedImageInstance.layer.cornerRadius = ...
}

在每个包含此类实例的 View Controller 中......有效,因为在 imageView 更改尺寸后重新计算框架,但这丑陋,并且类的存在似乎在这种情况下是不必要的。。

我尝试将框架的重新计算放在 drawRect 中 - 也不起作用。有什么想法吗?

最佳答案

这是一个简单的例子,它是 IBDesignable(你可以在界面生成器中看到它的样子)

@IBDesignable
class RoundedUIImageView: UIImageView {
@IBInspectable var round: Bool = true {
didSet {
self.clipsToBounds = true
self.layer.cornerRadius = self.frame.width / 2
self.layer.borderWidth = 2.5
self.layer.borderColor = UIColor(rgba: "#D0D0D0").CGColor
}
}
}

您可以使其更复杂,因为这假定 UIImageView 是正方形。如果不是,它将最终成为一个椭圆。您可以计算最小尺寸,然后以这种方式剪裁。但这是您尝试执行的最简单的形式。

编辑:同样的想法,但代码更加精炼。

import UIKit

@IBDesignable
class RoundedUIImageView: UIImageView {
@IBInspectable var round: Bool = true {
didSet { self.setNeedsLayout() }
}

@IBInspectable var width: CGFloat = 2.5 {
didSet { self.setNeedsLayout() }
}

@IBInspectable var color: UIColor = UIColor(rgba: "#D0D0D0") {
didSet { self.setNeedsLayout() }
}

override func layoutSubviews() {
super.layoutSubviews()
self.clipsToBounds = true

if round {
self.layer.cornerRadius = self.frame.width / 2
} else {
self.layer.cornerRadius = 0
}

self.layer.borderWidth = self.width
self.layer.borderColor = self.color.CGColor
}
}

它有默认值,所以一切都可以保持一致。但它也可以通过 Storyboard进行定制。

关于ios - 如何创建一个自己四舍五入的 UIImageView 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490741/

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