在Interface Builder中设置蒙版角

Jac*_*owe 7 interface-builder uiview ios

什么类型的价值[.layerMaxXMinYCorner, .layerMinXMinYCorner]?是否可以在Interface Builder中的View上设置此参数?我知道如何设置layer.borderWidth,layer.borderUIColorlayer.cornerRadius在Identity Inspector中,但我无法找出用于蒙面角的正确类型和值.

谢谢!

可靠的人


更新:以下是每个组合的整数值(以圆整为单位):

  • 0:没有圆角
  • 1:左上角
  • 2:右上角
  • 3:左上角和右上角(两个顶角)
  • 4:左下角
  • 5:左上角和左下角(左角)
  • 6:右上角和左下角
  • 7:左上角和右上角,左下角(除了右下角以外的所有角落)
  • 8:右下角
  • 9:左上角,右下角
  • 10:右上角和右下角(右角)
  • 11:两个顶角,右下角(除了左下角以外的所有角落)
  • 12:左下和右下(两个底角)
  • 13:左下和右下,左上角(除了右上角以外的所有角落)
  • 14:左下和右下,右上(除了左上角以外的所有角落)
  • 15:所有角落圆润

  • 左上角是1,3,5,7,9,11,13,15
  • 右上角是2-3,6-7,10-11,14-15
  • 左下角是4-7,12-15
  • 右下角是8-15

  • 两个顶角都在3,7,11,15

  • 两个右角都在10-11,14,55
  • 两个底角均在12-15
  • 两个左角都在5,7,13,15

Mik*_*ock 5

maskedCorners是一个 CACornerMask,它是一个 OptionSet,或位掩码。原始值是一个整数:在代码中,您可以尝试打印 的值someView.layer.maskedCorners.rawValue,或通过 设置它someView.layer.maskedCorners.setValue(3, forKey: "maskedCorners")

因此,您应该能够layer.maskedCorners在 Interface Builder中将 的值设置为整数 3(或您需要的任何值),我不明白为什么这样做会不安全。虽然如果你忘记了,弄清楚整数值实际映射到哪一组角会很痛苦。


Dar*_*yte 5

我只是随机遇到了这个相同的“问题”并编写了另一个解决方案,使用扩展(无子类化)和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)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)