从绘制的UIView中删除文本

时间:2018-05-08 08:30:14

标签: ios objective-c uiview core-graphics

我正在尝试从中绘制UIView并删除文本以产生类似于此的效果:

enter image description here

到目前为止,我还没有找到让文本充当橡皮擦的方法。这就是我所在的地方:

enter image description here

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。

1 个答案:

答案 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)