Swift 2中的UIImageView Pie Mask

时间:2016-03-18 16:06:08

标签: ios swift uiimageview uiimage mask

在搜索了很多关于如何在 Swift 中屏蔽图像的来源之后,我发现许多使用UIImage而不是UIImageView。它变得非常混乱,因为它们几乎相似,但它们不共享一些相同的子类和属性。

我有一个图像将被添加到堆栈视图中,虽然我希望这个图像被屏蔽为具有固定开始和结束角度的圆形形状。

示例

Original Picture and Desired Mask Result

原始图片和所需的面具结果

我想强调的是,我正在模拟切出的馅饼,所以基本上我正在用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

1 个答案:

答案 0 :(得分:2)

要屏蔽图层,请为mask属性指定单独的图层。在这种情况下,我认为您正在寻找的是:

testPicture.layer.mask = shapeLayer