如何根据背景图片的颜色更改UILabel文本颜色?

4
我希望根据背景图片的颜色更改标签文本颜色。背景图片位于UIScrollView上,而UILabel位于其上方。当滚动视图滚动时,标签颜色应该基于背景图片的颜色进行更改。
基本上,就像如果标签在图像的黄色部分上,它将是黑色的;如果标签在图像的蓝色部分上,它将是白色的。
请参见下面的图像:
感谢您的帮助。

2
如果你这样做,难道不会失去读取标签的能力吗? - Mick MacCallum
你需要澄清你想要什么。从你的帖子中看来,你想让文本颜色与背景颜色相同,这将使其消失。我假设这不是你想要的。 - rdelmar
也许你应该澄清一下。这个问题可以理解为:如何使文本颜色与背景颜色相同,最好的情况是文本变得不可见!如果这是你想要的,那么最好的方法就是在一开始就隐藏标签,或者按照下面其中一个答案建议的绕路方式来实现相同的效果。然而,如果你的问题是关于选择文本颜色,使得文本可以在不同的背景下舒适地阅读,那么这是一个完全不同的问题。研究颜色空间,并找到与背景相反的颜色。维基百科是你的朋友 :) - verec
如果您这样做,我认为您的标签将无法显示。 - utkal patel
希望我的编辑能够帮助使问题更清晰。 - Jojodmo
1个回答

1

首先创建一个名为hiddenViewUIView,大小与你的scorllviewcontentsize相同,并将其背景颜色设置为你在scrollview中设置的image的背景颜色,但你不需要将此视图添加到任何地方。

实现scrollViewDidScroll方法

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 
 {
     CGRect visibleRect;
     visibleRect.origin = scrollView.contentOffset;
     visibleRect.size = scrollView.bounds.size;

     float theScale = 1.0 / scale;
     visibleRect.origin.x *= theScale;
     visibleRect.origin.y *= theScale;
     visibleRect.size.width *= theScale;
     visibleRect.size.height *= theScale;

     CGImageRef imageRef = CGImageCreateWithImageInRect((CGImageRef)hiddenView.layer.contents, visibleRect);
     UIImage *BackImage = [UIImage imageWithCGImage:imageRef];
     [YourLabel setTextColor:[UIColor colorWithPatternImage:BackImage];
 }

尝试这个,希望它能满足你的需求。


以下是正确的答案。已更新为Swift 3:visibleRect.origin = scrollView.contentOffset visibleRect.size = scrollView.bounds.size let scale: CGFloat = 1.0 / UIScreen.main.scale visibleRect.origin.x *= scale visibleRect.origin.y *= scale visibleRect.size.width *= scale visibleRect.size.height *= scale let renderer = UIGraphicsImageRenderer(size: contentView.bounds.size) let image = renderer.image { _ in view.drawHierarchy(in: view.bounds, afterScreenUpdates: true) } label.textColor = UIColor(patternImage: image)``` - ssh88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接