我正在尝试创建一个用户可以使用的颜色选择器工具。颜色选择器有一个所有颜色的 slider 和一个额外的 slider 来设置颜色的深浅。两者都显示在图 1 和图 2 中:
图片 1 : 选择颜色:
图 2 : 设置颜色有多深
我知道我可以为 slider 使用自定义图像,而不是将每种颜色与一个位置匹配,这意味着我需要创建巨大的数组并且需要做很多工作。设置颜色深浅的第二个 slider 仍需要在运行时计算。我怀疑这种方法有什么好处,因此问你是否对如何解决这个问题有更好的想法。也许一个将颜色与 slider 位置联系起来的数学函数,color(x),其中 x 是 slider 的位置,可以解决问题。那么如何根据位置创建颜色并基于此数学函数创建 slider ?
最佳答案
我以前这样做的方式就是使用图像。
您可以根据它的位置渲染每个像素等......但这是非常密集的东西,图像实际上不会改变。
各种应用程序已经内置了色调渐变(Pixelmatr 和 Photoshop 都有)。
只需创建一个色调渐变图像并在色调 slider 后面使用它。
对于亮度 slider ,创建一个透明的黑色渐变图像并将其放在 slider 上。现在您只需设置 slider 颜色,其顶部的渐变将使其看起来正确。
我使用这种技术在我的应用程序中创建了这个颜色选择器......
左侧的“ slider ”使用具有色调渐变的单个图像。
右侧的“亮度/饱和度”选择器使用单个图像,从左到右白色透明渐变,从下到上黑色透明渐变。然后我只需要根据色调设置背景颜色。
示例
iOS 中的所有颜色都使用基于 0.0-1.0 的颜色。
因此,您所需要的只是沿每个 View 的距离的百分比。
所以你的职位是 CGPoint
并且需要产生一个百分比。
每种颜色都是“3 维的”(4 带有 alpha,但我没有包括它)所以你需要三个百分比。
在简单的色调 View ...
// put this inside the hue view (if you're not using a UISlider
// this works vertically you ay need yours to work horizontally.
- (CGFloat)hueValueForTouchPosition:(CGPoint)touchPoint {
return touchPoint.y / CGRectGetHeight(self.frame);
}
这将根据触摸在 View 中的位置返回正确的色调值。
现在您可以使用它来设置亮度 View 的背景颜色。
// this will change the background color of the brightness view to match the selected hue
CGFloat hue = [self.hueView hueValueForTouchPosition:touchPoint];
self.brightnessView.backgroundColor = [UIColor colorWithHue:hue brightness:1.0 saturation:1.0 alpha:1.0];
现在你只需要对亮度做同样的事情
关于ios - 颜色作为 slider 位置的函数,用于设置颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954319/