[英]how to make Designable UIImage in Swift
我是初學者。 我想制作一個包含使Designable UIImage可用的代碼的swift文件,所以我不會通過編碼來編輯UI元素的顯示,而只是在Interface Builder中通過將該swift文件分配給UI類來進行編輯。
我可以在UIButton中做類似的事情,例如,如果我想做圓角並向UIButton添加邊框,我可以做這樣的事情
import UIKit
@IBDesignable
class DesignableButton: UIButton {
@IBInspectable var cornerRadiusOfButton : CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadiusOfButton
}
}
@IBInspectable var borderWidth: CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
set {
guard let uiColor = newValue else { return }
layer.borderColor = uiColor.cgColor
}
get {
guard let color = layer.borderColor else { return nil }
return UIColor(cgColor: color)
}
}
}
對於UIImage,通常我們想使用此代碼添加圓角或制作圓形UIImage
// round corner
someImage.layer.cornerRadius = checkinPhoto.bounds.width/20
someImage.clipsToBounds = true
// circular image
someImage.layer.cornerRadius = someImage.frame.size.width / 2
someImage.clipsToBounds = true
如何使這些代碼成為UIImage的@IBDesignable代碼類,例如上面的Designable UIButton? 我試圖通過子類化UIImage進行制作,但是我不解釋為什么我無法訪問layer
和clipToBounds
您不能將UIImage
用作可設計的對象,因為UIImage
並非需要使UIImageView
可設計的UIView
子類,因此,不能單獨呈現UIImage
,而需要呈現UIImageView
使用這個課程
import UIKit
@IBDesignable
class RoundableImageView: UIImageView {
@IBInspectable var cornerRadius : CGFloat = 0.0{
didSet{
self.applyCornerRadius()
}
}
@IBInspectable var borderColor : UIColor = UIColor.clear{
didSet{
self.applyCornerRadius()
}
}
@IBInspectable var borderWidth : Double = 0{
didSet{
self.applyCornerRadius()
}
}
@IBInspectable var circular : Bool = false{
didSet{
self.applyCornerRadius()
}
}
func applyCornerRadius()
{
if(self.circular) {
self.layer.cornerRadius = self.bounds.size.height/2
self.layer.masksToBounds = true
self.layer.borderColor = self.borderColor.cgColor
self.layer.borderWidth = CGFloat(self.borderWidth)
}else {
self.layer.cornerRadius = cornerRadius
self.layer.masksToBounds = true
self.layer.borderColor = self.borderColor.cgColor
self.layer.borderWidth = CGFloat(self.borderWidth)
}
}
override func awakeFromNib() {
super.awakeFromNib()
self.applyCornerRadius()
}
override func layoutSubviews() {
super.layoutSubviews()
applyCornerRadius()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.