[.layerMaxXMinYCorner, .layerMinXMinYCorner]
是什么类型的值?是否可以在Interface Builder中的View上设置此参数?我知道如何在Identity Inspector中设置layer.borderWidth
,layer.borderUIColor
和layer.cornerRadius
,但我无法找出用于蒙版边角的正确类型和值。
谢谢!
杰克
更新:这是每个组合的整数值(以圆整为单位):
右下角是8-15
两个顶角均为3,7,11,15
答案 0 :(得分:3)
maskedCorners
是一个CACornerMask,它是一个OptionSet或位掩码。原始值为整数:在代码中,您可以尝试打印someView.layer.maskedCorners.rawValue
的值,或通过someView.layer.maskedCorners.setValue(3, forKey: "maskedCorners")
进行设置。
所以你应该能够在Interface Builder中将layer.maskedCorners
的值设置为整数3(或者你需要的任何东西),我不明白为什么这样做会不安全。虽然如果忘记了,整数值实际映射到哪个角集将会很痛苦。
答案 1 :(得分:1)
没有检查它是否有效,但是您可以尝试c:
(不要忘记将蒙版应用于您的视图)
@IBDesignable
class ViewController: UIViewController {
// Preprocessor macro, you won't be able
// to use code inside this "if" statement from your... code
// Just use cornerMask property directly
#if TARGET_INTERFACE_BUILDER
@IBInspectable
var topLeft: Bool = false {
didSet {
updateCornerMask()
}
}
@IBInspectable
var topRight: Bool = false {
didSet {
updateCornerMask()
}
}
@IBInspectable
var bottomLeft: Bool = false {
didSet {
updateCornerMask()
}
}
@IBInspectable
var bottomRight: Bool = false {
didSet {
updateCornerMask()
}
}
func updateCornerMask() {
cornerMask = CACornerMask(
TL: topLeft,
TR: topRight,
BL: bottomLeft,
BR: bottomRight)
}
#endif
var cornerMask: CACornerMask?
}
extension CACornerMask {
init(TL: Bool = false, TR: Bool = false, BL: Bool = false, BR: Bool = false) {
var value: UInt = 0
if TL { value += 1 }
if TR { value += 2 }
if BL { value += 4 }
if BR { value += 8 }
self.init(rawValue: value)
}
}
// And yeah maybe using UIView makes more sense
答案 2 :(得分:1)
我只是随机遇到了同样的“问题”并编写了另一个解决方案,使用扩展(无子类化)和 IB 中每个角的视觉切换(无需手动设置/添加位标志)。
请记住,默认设置为 On / true
(以便“cornerRadius”影响视图的所有角落)。如果您想对除一个角以外的所有角进行圆角处理,只需将该特定角设置为 false
。
import UIKit
@IBDesignable
public extension UIView {
@IBInspectable var cornerRadius: CGFloat {
get { return layer.cornerRadius }
set { layer.cornerRadius = newValue }
}
@IBInspectable var topLeft: Bool {
get { return layer.maskedCorners.contains(.layerMinXMinYCorner) }
set {
if newValue {
layer.maskedCorners.insert(.layerMinXMinYCorner)
} else {
layer.maskedCorners.remove(.layerMinXMinYCorner)
}
}
}
@IBInspectable var topRight: Bool {
get { return layer.maskedCorners.contains(.layerMaxXMinYCorner) }
set {
if newValue {
layer.maskedCorners.insert(.layerMaxXMinYCorner)
} else {
layer.maskedCorners.remove(.layerMaxXMinYCorner)
}
}
}
@IBInspectable var bottomLeft: Bool {
get { return layer.maskedCorners.contains(.layerMinXMaxYCorner) }
set {
if newValue {
layer.maskedCorners.insert(.layerMinXMaxYCorner)
} else {
layer.maskedCorners.remove(.layerMinXMaxYCorner)
}
}
}
@IBInspectable var bottomRight: Bool {
get { return layer.maskedCorners.contains(.layerMaxXMaxYCorner) }
set {
if newValue {
layer.maskedCorners.insert(.layerMaxXMaxYCorner)
} else {
layer.maskedCorners.remove(.layerMaxXMaxYCorner)
}
}
}
}
答案 3 :(得分:0)