我见过类似的问题,但还没有找到可行的答案。
我想使用灰度图像遮罩UIView (需要转换为alpha比例进行遮罩)。UIView具有背景知识。遮罩图像应该很容易,但我想要遮罩任何UIView。
任何线索都将不胜感激。
发布于 2011-08-29 18:00:19
我已经在这个问题上工作了几个小时,我有一个解决方案,我认为它会做你想要的。首先,使用您认为合适的任何方法创建遮罩图像。注意,这里我们只需要alpha值,所有其他颜色都将被忽略,因此请确保您使用的方法支持alpha值。在本例中,我从一个.png文件加载,但不要尝试用.jpg文件加载,因为它们没有Alpha值。
接下来,创建一个新层,将蒙版指定给它的内容,并将此新层设置为您的to视图自己的层,如下所示:您会发现这会遮罩UIView及其所有附加的子视图:
UIImage *_maskingImage = [UIImage imageNamed:@"mask"];
CALayer *_maskingLayer = [CALayer layer];
_maskingLayer.frame = theView.bounds;
[_maskingLayer setContents:(id)[_maskingImage CGImage]];
[theView.layer setMask:_maskingLayer];完成此操作后,您可以将UIView的背景颜色设置为您喜欢的任何颜色,蒙版将用于创建彩色滤镜。
EDIT:从iOS8开始,您现在可以简单地通过将另一个视图分配给视图的maskView属性来屏蔽视图。一般规则保持不变,因为maskView的alpha层用于确定应用它的视图的不透明度。
发布于 2016-05-10 06:13:51
对于面向iOS 8.0+的应用程序,这很有效(在本例中,使用渐变作为蒙版),它避免了任何需要调整蒙版大小或位置的需要。
// Add gradient mask to view
func addGradientMask(targetView: UIView)
{
let gradientMask = CAGradientLayer()
gradientMask.frame = targetView.bounds
gradientMask.colors = [UIColor.blackColor().CGColor, UIColor.clearColor().CGColor]
gradientMask.locations = [0.8, 1.0]
let maskView: UIView = UIView()
maskView.layer.addSublayer(gradientMask)
targetView.maskView = maskView
}在我的例子中,我想在用户开始滚动时移除掩码。这是通过以下方式完成的:
func scrollViewWillBeginDragging(scrollView: UIScrollView) {
exerDetailsTableView.maskView = nil
}其中视图定义为@IBOutlet:
@IBOutlet weak var exerDetailsTableView: UITableView!结果:

发布于 2010-12-30 11:19:18
我不知道确切的代码,但基本的想法是有两个UIViews。一个UIView会将其图像属性设置为灰度图像,而另一个UIView将照常设置。唯一不同的是,您将直接将初始UIView定位在包含“正常”图像的UIView之上。
我希望这足以推动你的想法更进一步。
https://stackoverflow.com/questions/4559743
复制相似问题