【发布时间】:2011-11-16 11:35:21
【问题描述】:
我想知道是否有人知道是否有一种简单的方法可以反转 UIWebView 或 UITextView 的颜色。我知道可以在您的 iPhone 上反转所有内容,但我不希望用户必须这样做,他们应该能够在应用程序中一键单击,反转颜色,以便在光线不足的情况下阅读对用户周围的人来说,一些事情会更容易和更少干扰。
感谢您的帮助!
【问题讨论】:
标签: iphone ios colors uiwebview
我想知道是否有人知道是否有一种简单的方法可以反转 UIWebView 或 UITextView 的颜色。我知道可以在您的 iPhone 上反转所有内容,但我不希望用户必须这样做,他们应该能够在应用程序中一键单击,反转颜色,以便在光线不足的情况下阅读对用户周围的人来说,一些事情会更容易和更少干扰。
感谢您的帮助!
【问题讨论】:
标签: iphone ios colors uiwebview
这是我通过注入 javascript(过去)在 UIWebView 中反转颜色的一种方法。
首先...
#define invertJS @"function load_script(src,callback){var s=document.createElement('script');s.src=src;s.onload=callback;document.getElementsByTagName('head')[0].appendChild(s);}function invertColors(){var colorProperties=['color','background-color'];$('*').each(function(){var color=null;for(var prop in colorProperties){prop=colorProperties[prop];if(!$(this).css(prop))continue;color=new RGBColor($(this).css(prop));if(color.ok){$(this).css(prop,'rgb('+(255-color.r)+','+(255-color.g)+','+(255-color.b)+')');}color=null;}});}load_script('http://www.phpied.com/files/rgbcolor/rgbcolor.js',function(){if(!window.jQuery)load_script('https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js',invertColors);else invertColors();})"
然后当你的 webview 完成加载时
- (void)webViewDidFinishLoad:(UIWebView *)webview{
[webview stringByEvaluatingJavaScriptFromString:invertJS];}
【讨论】:
对于 UITextView,您可以设置文本颜色和背景颜色属性,我知道从那里您可以设置一个按钮来在白色背景/黑色文本和黑色背景/白色文本之间切换。不幸的是,我没有看到 UIWebView 的任何类似属性。
请参阅 iOS 文档以了解 UITextViews 和 UIWebViews。
此外,在将颜色传递给这些属性时,您可以使用十六进制值而不是 Apple 的预设颜色。通过这种方式,您可以调用属性的十六进制值,使用任意数量的公式将其反转,然后将新的十六进制值传递回属性。
反转十六进制颜色,简单地说:
// maximum hex value is FFFFFF, so
newHex = FFFFFF - oldHex;
【讨论】:
要获取任何UIColor 的 ARGB 分量,您可以使用此答案中提供的代码:
然后,您可以通过从 1.0 中减去 r、g 和 b 分量(但不是 a)来“反转”颜色(某种程度),然后使用这些修改后的分量来产生新的颜色,如下所示:
r = 1.0 - r;
g = 1.0 - g;
b = 1.0 - b;
UIColor newColor = [UIColor colorWithRed:r green:g blue:b alpha:1.0];
【讨论】:
我最终只是在我的服务器上制作了两个单独的文件。一种是倒置的,一种是规则的。至少在核心图形中似乎没有任何东西可以轻松做到这一点,老实说 HTML 或 CSS 绝对不是我的强项。不过,如果有人对此有更简单的解决方案,我对一个好主意非常感兴趣。
【讨论】: