gpt4 book ai didi

Swift: mask 对齐+自动布局约束

转载 作者:搜寻专家 更新时间:2023-10-31 22:50:01 25 4
gpt4 key购买 nike

我有这个 PNG 文件,我想将其用作 UIView 的掩码。

enter image description here

View 必须是:

  • 每边 20 像素/点
  • 一个完美的正方形
  • 垂直居中

我设置了以下约束来完成此操作:

enter image description here

但是,这些限制似乎不适用于蒙版。设置这些约束和 mask 属性后,我得到以下信息:

enter image description here

但我希望 View 看起来像上面的 mask ,除了橙色(这里的 backgroundColor 只是为了简单起见——我稍后添加需要 mask 的 subview 。)

但是,当没有设置约束时,mask 似乎可以正常工作,我得到类似这样的结果(borderColor 添加仅用于视觉目的):

enter image description here

这是我的代码(viewForLayer 是我在 Storyboard中制作的 UIView):

    viewForLayer.layer.borderColor = UIColor.redColor().CGColor
viewForLayer.layer.borderWidth = 10

var mask = CALayer()
mask.contents = UIImage(named: "TopBump")!.CGImage
mask.frame = CGRect(x: 0, y: 0, width: viewForLayer.bounds.width, height: viewForLayer.bounds.height)
mask.position = CGPoint(x: viewForLayer.bounds.width/2, y: viewForLayer.bounds.height/2)
viewForLayer.layer.mask = mask
viewForLayer.backgroundColor = UIColor.orangeColor()

但问题是,现在 View 的大小或位置不正确——它不遵循上面的规则——“ View 必须是:”。 如何让mask正常工作,同时设置自动布局约束?

最佳答案

我找到了解决方法。不确定这是否是最好的方法,但我们开始吧......

http://imgur.com/pUIZbNA

只需确保您也在 Storyboard检查器中更改了 UIView 类的名称。显然,诀窍是为每个 layoutSubviews 调用设置 mask 框架。

class MaskView : UIView {

override func layoutSubviews() {
super.layoutSubviews()
if let mask = self.layer.mask {
mask.frame = self.bounds
}
}

}

class ViewController: UIViewController {

@IBOutlet weak var viewForLayer: MaskView!

override func viewDidLoad() {
super.viewDidLoad()
let image = UIImage(named: "TopBump")!.CGImage!
let maskLayer = CALayer()
maskLayer.contents = image
maskLayer.frame = viewForLayer.bounds
viewForLayer.layer.mask = maskLayer
viewForLayer.backgroundColor = UIColor.orangeColor()

// Do any additional setup after loading the view, typically from a nib.
viewForLayer.layer.borderColor = UIColor.redColor().CGColor
viewForLayer.layer.borderWidth = 10


}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

关于Swift: mask 对齐+自动布局约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30832094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com