我正在尝试从中绘制UIView并删除文本以产生类似于此的效果:
到目前为止,我还没有找到让文本充当橡皮擦的方法。这就是我所在的地方:
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(c, [UIColor whiteColor].CGColor);
CGContextFillRect(c, self.bounds);
CGContextSetBlendMode(c, kCGBlendModeClear);
CGContextSetTextDrawingMode(c, kCGTextFill);
CGContextSetFont(c, CGFontCreateWithFontName(CFStringCreateWithCString(NULL, "HelveticaNeue-Bold", kCFStringEncodingUTF8)));
CGContextSetFontSize(c, 18.0);
UIGraphicsPushContext(c);
[_text drawInRect:self.bounds
withAttributes:nil];
UIGraphicsPopContext();
我希望CGContextSetBlendMode(c, kCGBlendModeClear);
能让文字充当橡皮擦,但到目前为止,我没有运气。
我还有一个想法是使用UILabel作为maskView,但我不知道如何反转它以便将文本视为负空格。我能够在反转掩模上找到的唯一问题是反转CAShapeLayers或UIImages。
答案 0 :(得分:3)
我注意到你正在使用橡皮擦这个词。在设计界,这种效果将被称为面具。掩模将隐藏层的部分,露出下面的任何东西。
您可以使用标签和类似的视图执行此操作:
let view = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
let label = UILabel(frame: view.frame)
label.text = "$48.99"
label.font = UIFont.systemFont(ofSize: 70)
label.textAlignment = .center
label.textColor = UIColor.white
let underlyingView = UIView(frame: view.frame)
underlyingView.backgroundColor = UIColor.blue
underlyingView.mask = label
view.addSubview(underlyingView)