首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在接口生成器中设置掩蔽角

在接口生成器中设置掩蔽角
EN

Stack Overflow用户
提问于 2017-12-07 16:05:32
回答 4查看 2.4K关注 0票数 17

[.layerMaxXMinYCorner, .layerMinXMinYCorner]是什么类型的值?是否可以在Interface中的视图上设置此参数?我知道如何在标识检查器中设置layer.borderWidthlayer.borderUIColorlayer.cornerRadius,但我无法确定用于掩蔽角的正确类型和值。

谢谢!

杰克

更新:以下是每个组合的整数值(其中四舍五入):

  • 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,15
  • 底部的两个角落都在12-15。
  • 两个左角都在5,7,13,15。
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-12-07 16:25:22

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

因此,您应该能够在Interface中将layer.maskedCorners的值设置为整数3(或任何需要的值),我不知道为什么这样做是不安全的。不过,如果您忘记了,那么找出整数值实际映射到的角集将是一件很痛苦的事情。

票数 6
EN

Stack Overflow用户

发布于 2021-03-16 20:16:03

我只是随机地遇到了同样的“问题”,并编写了另一个解决方案,使用了一个扩展(没有子类)和IB中每个角落的可视切换(没有手动设置/添加位标志)。

请记住,默认设置在/ true上(因此"cornerRadius“影响视图的所有角落)。如果你想绕过所有的角落,除了一个,只需将这个特定的角设置为false

代码语言:javascript
复制
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)
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2019-05-22 17:53:20

没有检查它是否有效,但是您可以尝试c:

(别忘了把面具应用到你的视野中)

代码语言:javascript
复制
@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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47699095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档