动态UIView

时间:2016-05-23 21:55:29

标签: ios transparency calayer mask

不知道在哪里寻找这个,但我想创建一个视图或图层的半透明蒙版,可以移动,改变不透明度,并在屏幕上重叠多个。

有这样的效果:

enter image description here

两个小盒子可以移动并改变颜色的不透明度。

我尝试使用CALayer面具,但这只是穿透,所以我在洞中添加了CAShapeLayer但你可以看到边缘。我尝试在allowsEdgeAntialiasing上使用CAShapeLayer,但这似乎不起作用。

我见过的其他例子只适用于UIImageViews,因为它们使用两个UIImageViews来获得效果。不幸的是,我需要这个来处理任何类型的UIView。

我也尝试使用CGBlendMode.SourceOut,除了重叠区域更轻,这种方法很有效,这完全有道理但不是我想要的。

let blendMode = CGBlendMode.SourceOut

CGContextSaveGState(context)

CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 0.75).CGColor)
CGContextFillRect(context, rect)

CGContextSetBlendMode(context, blendMode)

CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 0.25).CGColor)
CGContextFillRect(context, CGRectMake(0, 500, 60, 50))

CGContextSetFillColorWithColor(context, UIColor(white: 0.0, alpha: 1).CGColor)
CGContextFillRect(context, CGRectMake(0, 550, 60, 50))

最后两个填充符重叠,第一个是将整个视图设置为半透明叠加。

1 个答案:

答案 0 :(得分:0)

看起来您可以使用混合模式:

  • 背景正常
  • 清除正方形的孔
  • 正常再次为正方形赋予重叠外观

enter image description here

当第二个框设置为与背景相同的alpha时,这似乎不会显示正方形周围的边

enter image description here

此代码生成顶部图像(在drawRect中调用):

Fragment fragment = getFragmentManager().findFragmentByTag("YOUR_TAG");