首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颜色作为设置颜色的滑块位置的函数

颜色作为设置颜色的滑块位置的函数
EN

Stack Overflow用户
提问于 2015-11-27 09:34:39
回答 3查看 1.8K关注 0票数 1

我试图创建一个颜色选择工具,用户可以使用。颜色选择器有一个所有颜色的滑块和额外的滑块来设置颜色有多深。两者均如图1和2所示:

图像1:选择颜色:

图像2:设置暗颜色

我知道我可以用一个自定义的图像作为滑块,而不是将每种颜色与一个位置相匹配,这意味着我需要创建巨大的数组,这需要大量的工作。设置暗颜色的第二个滑块仍然需要在运行时进行计算。我怀疑这种方法是否有用,因此问你是否对如何解决这个问题有更好的想法。也许一个将颜色和滑块位置联系起来的数学函数,颜色(X),其中x是滑块的位置,就能做到这一点。那么,如何创建一个颜色作为一个函数的位置,并创建一个滑块基于这个数学函数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-27 11:38:57

我以前做这件事的方法就是使用图像。

你可以根据每个像素的位置等来渲染.但这是非常密集的东西,图像实际上不会改变。

各种应用程序已经内置了色调渐变(Pixelmatr和Photoshop都有)。

只需创建一个色调梯度图像,并使用后面的色调滑块。

对于亮度滑块,创建一个透明-黑色梯度图像,并将其放在滑块上。现在你只需设置滑块的颜色,上面的梯度将使它看起来正确。

我用这个技术在我的一个应用程序中创建了这个颜色选择器.

左边的“滑块”使用带有色调梯度的单一图像。

右边的“亮度/饱和度”选择器使用从左到右的白色透明梯度和从下到上的黑色透明梯度的单一图像。然后我只需要根据色调来设置背景颜色。

示例

iOS中的所有颜色都使用基于0.0-1.0的颜色.

所以,你所需要的只是每一个视图的距离的百分比。

因此,您有一个CGPoint的职位,需要生成一个百分比。

每种颜色都是“三维”(4和alpha,但我没有包括它),所以你需要三个百分比。

对于色调的看法很容易..。

代码语言:javascript
运行
复制
// 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);
}

这将根据视图中触摸的位置返回正确的色调值。

现在您可以使用它来设置亮度视图的背景色。

代码语言:javascript
运行
复制
// 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];

现在你只需要对亮度做同样的事情

票数 2
EN

Stack Overflow用户

发布于 2015-11-27 09:51:08

你可以这样做:

  1. 通过在滑块视图的子类中实现来获取UITouch事件方法。
  2. 获取触点的position(CGPoint)
  3. 计算如下 在最大亮度为1.0时,使用以下方法降低亮度 slider.frame.origin.x)/slider.frame.size.width);CGFloat currentBrightness = 1.0 -( UIColor *newColor = UIColor颜色:电流色饱和度:电流亮度α:1.0;

其中currentHuecurrentSaturation将从颜色选择滑块中计算。

票数 2
EN

Stack Overflow用户

发布于 2015-11-27 11:24:19

你需要一个不少于三个滑块,它们可以是RGB或HSB滑块。然后可以直接从以下方法生成当前颜色:

为RGB

代码语言:javascript
运行
复制
[UIColor colorWithRed:slider1.value
                Green:slider2.value
                 Blue:slider3.value
                alpha:1.0];

为HSB

代码语言:javascript
运行
复制
[UIColor colorWithHue:slider1.value
           saturation:slider2.value
           brightness:slider3.value
                alpha:1.0];

对于动态设置滑块的背景梯度,可以通过改变其值来获得每一个滑块的梯度。

例如,如果H:0.2 S:0.6 B:0.5是当前的滑块位置,那么梯度将是-

Slider1 : H:__0.0 S:0.6 B:0.5 to H:__1.0 S:0.6 B:0.5

Slider2 : H:0.2 S:__0.0 B:0.5至H:0.2 S:__1.0 B:0.5

Slider3 : H:0.2 S:0.6 B:__0.0至H:0.2 S:0.6 B:__1.0

如果你想走简单的路,外面有很多图书馆。有关例如,请参见

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33954319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档