[.layerMaxXMinYCorner, .layerMinXMinYCorner]是什么类型的值?是否可以在Interface中的视图上设置此参数?我知道如何在标识检查器中设置layer.borderWidth、layer.borderUIColor和layer.cornerRadius,但我无法确定用于掩蔽角的正确类型和值。
谢谢!
杰克
更新:以下是每个组合的整数值(其中四舍五入):
发布于 2017-12-07 16:25:22
maskedCorners是一个CACornerMask,它是一个OptionSet或位掩码。原始值是一个整数:在代码中,您可以尝试打印someView.layer.maskedCorners.rawValue的值,或者通过someView.layer.maskedCorners.setValue(3, forKey: "maskedCorners")设置它。
因此,您应该能够在Interface中将layer.maskedCorners的值设置为整数3(或任何需要的值),我不知道为什么这样做是不安全的。不过,如果您忘记了,那么找出整数值实际映射到的角集将是一件很痛苦的事情。
发布于 2021-03-16 20:16:03
我只是随机地遇到了同样的“问题”,并编写了另一个解决方案,使用了一个扩展(没有子类)和IB中每个角落的可视切换(没有手动设置/添加位标志)。
请记住,默认设置在/ 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)
}
}
}
}发布于 2019-05-22 17:53:20
没有检查它是否有效,但是您可以尝试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 https://stackoverflow.com/questions/47699095
复制相似问题