iOS UIView子类,将透视文字绘制到背景

iOS UIView子类,将透视文字绘制到背景,第1张

概述我想在UIView上的子类绘制文本,以便将文本从形状和视图背后的背景中删除,就像在OSX Mavericks标识找到的 here中一样. 我会说,我更像是一个中级/早期的高级iOS开发人员,所以我可以自由地向我提出一些疯狂的解决方案.我希望我必须重写drawRect才能做到这一点. 多谢你们! 编辑: 我应该提到,我的第一次尝试是使文本[UIColor clearColor]不起作用,因为只是将 @H_403_0@我想在UIVIEw上的子类上绘制文本,以便将文本从形状和视图背后的背景中删除,就像在OSX Mavericks标识找到的 here中一样.

我会说,我更像是一个中级/早期的高级iOS开发人员,所以我可以自由地向我提出一些疯狂的解决方案.我希望我必须重写drawRect才能做到这一点.

多谢你们!

编辑:

我应该提到,我的第一次尝试是使文本[UIcolor clearcolor]不起作用,因为只是将文本的Alpha组件设置为0,这只是通过文本显示视图.

解决方法 免责声明:我在写这个没有测试,所以原谅我,如果我错了这里.

你应该通过这两个步骤实现你所需要的:

>使用视图的大小创建一个CATextLayer,将backgroundcolor设置为完全透明,并将foregroundcolor设置为不透明(通过[UIcolor colorWithWhite:0 Alpha:1]和[UIcolor colorWithWhite:0 Alpha:0]),然后设置字符串属性到要渲染的字符串,字体和FontSize等
>将视图的图层的蒙版设置为此图层:myVIEw.layer.mask = textLayer.您必须导入QuartzCore才能访问您的视图的CALayer.

请注意,我可能在第一步中在不透明和透明颜色之间切换.

编辑:的确,诺亚是对的.为了克服这个问题,我使用了CoreGraphics与kCGBlendModeDestinationOut混合模式.

首先,显示它确实有效的示例视图:

@implementation TestVIEw- (ID)initWithFrame:(CGRect)frame {  if (self = [super initWithFrame:frame]) {    self.backgroundcolor = [UIcolor clearcolor];  }  return self;}- (voID)drawRect:(CGRect)rect {  [[UIcolor redcolor] setFill];  UIBezIErPath *path = [UIBezIErPath bezIErPathWithRoundedRect:self.bounds cornerRadius:10];  [path fill];  CGContextRef context = UIGraphicsGetCurrentContext();  CGContextSaveGState(context); {    CGContextSetBlendMode(context,kCGBlendModeDestinationOut);    [@"Hello!" drawAtPoint:CGPointZero withFont:[UIFont systemFontOfSize:24]];  } CGContextRestoreGState(context);}@end

将其添加到您的视图控制器后,您将看到TestVIEw后面的视图,您好!被绘制

为什么这样做:

混合模式被定义为R = D *(1-Sa),这意味着我们需要与之前建议的掩模层相反的α值.因此,您所需要做的就是用不透明的颜色进行绘制,这将从预先在视图中绘制的东西中减去.

总结

以上是内存溢出为你收集整理的iOS UIView子类,将透视文字绘制到背景全部内容,希望文章能够帮你解决iOS UIView子类,将透视文字绘制到背景所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1108453.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存