在搜索了很多关于如何在 Swift 中屏蔽图像的来源之后,我发现许多使用UIImage而不是UIImageView。它变得非常混乱,因为它们几乎相似,但它们不共享一些相同的子类和属性。
我有一个图像将被添加到堆栈视图中,虽然我希望这个图像被屏蔽为具有固定开始和结束角度的圆形形状。
示例:
原始图片和所需的面具结果
我想强调的是,我正在模拟切出的馅饼,所以基本上我正在用Pie的尺寸裁剪图像。
这是我到目前为止尝试开始的事情(我一直都在失败)......
let testPicture:UIImageView = UIImageView(image: UIImage(named: "myPicture"))
testPicture.contentMode = .ScaleAspectFit
testPicture.layer.borderWidth = 1
testPicture.clipsToBounds = true
testPicture.layer.masksToBounds = true
view.layer.addSublayer(shapeLayer)
// ???
// UIBezierPath(arcCenter: center, radius: radius, startAngle: CGFloat(startAngle), endAngle: CGFloat(endAngle), clockwise: clockwise).CGPath
self.myStackView.addArrangedSubview(testPicture)
self.myStackView.layoutIfNeeded()
当其他源只使用UIImage时,我无法弄清楚如何使用几何函数应用相同的蒙版图像实现。
生成饼图的新代码(尝试)
let center = CGPointMake(testPicture.frame.size.width / 2, testPicture.frame.size.height / 2)
let radius = CGFloat((CGFloat(testPicture.frame.size.width) - CGFloat(1.0)) / 2)
let midX = (testPicture.layer.frame.width-testPicture.layer.frame.width)/2
let midY = (testPicture.layer.frame.height-testPicture.layer.frame.height)/2
let circlePath = UIBezierPath(arcCenter: CGPoint(x: midX , y: midY), radius: radius, startAngle: CGFloat(10), endAngle:CGFloat(M_PI * 2), clockwise: true)
let maskLayer = CAShapeLayer()
maskLayer.path = circlePath.CGPath
testPicture.layer.mask = maskLayer
testPicture.clipsToBounds = true
testPicture.layer.masksToBounds = true
答案 0 :(得分:2)
要屏蔽图层,请为mask
属性指定单独的图层。在这种情况下,我认为您正在寻找的是:
testPicture.layer.mask = shapeLayer