iOS:变色圆圈按钮

时间:2013-06-10 20:58:09

标签: ios cocoa-touch uibutton

我正在尝试制作一个显示/隐藏颜色选择滑块的按钮。这很容易。

我不确定该怎么做是让按钮成为带轮廓的圆圈(比如黑色),填充是滑块中显示的颜色。当用户移动滑块时,圆圈的颜色应相应更改。

我是iOS开发的新手,所以我可能接近这一切都错了。我真的很感激任何想法,即使它们与我在这里完全不同。

我开始使用QuartzCore图层使用子类来处理这个问题,结果很不错,但有些问题/事情让我烦恼:

  1. 出于某种原因,按下按钮时没有突出显示状态
  2. 使用圆角实现圆圈显然很奇怪
  3. 不幸的是,在我绘制图层的时候,按钮还没有布局,所以我不得不对半径进行硬编码,而不是根据按钮大小进行编码。
  4. 所以,是的,我几乎不认为这种方法是理想的。我将非常感谢任何和所有的帮助。谢谢!

            #import "ColorPickerButton.h"
            @implementation ColorPickerButton
    
            #pragma mark - UIButton Overrides
    
            + (ColorPickerButton *)buttonWithType:(UIButtonType)buttonType
            {
                return [super buttonWithType:UIButtonTypeCustom];
            }
    
            - (id)initWithCoder:(NSCoder *)aDecoder
            {
                self = [super initWithCoder:aDecoder];
    
                if (self)
                {
                    r = 0.3;
                    g = 0.6;
                    b = 0.9;
                    [self drawOutline];
                    [self drawColor];
                }
                return self;
            }
    
            - (id)initWithFrame:(CGRect)frame
            {
                self = [super initWithFrame:frame];
                if (self) {
                    // Initialization code
                }
                return self;
            }
    
            - (void)layoutSubviews
            {
                _outlineLayer.frame = CGRectInset(self.bounds, 5, 5);
                _colorLayer.frame = CGRectInset(self.bounds, 5+_outlineLayer.borderWidth,           5+_outlineLayer.borderWidth);
                [super layoutSubviews];
            }
    
            #pragma mark - Layer setters
    
            - (void)drawOutline
            {
                if (!_outlineLayer)
                {
                    _outlineLayer = [CALayer layer];
    
                    _outlineLayer.cornerRadius = 20.0;
                    _outlineLayer.borderWidth = 3;
                    _outlineLayer.borderColor = [[UIColor colorWithRed:170.0/255.0 green:170.0/255.0 blue:170.0/255.0 alpha:1.0] CGColor];
                    _outlineLayer.opacity = 0.6;
    
                    [self.layer insertSublayer:_outlineLayer atIndex:1];
                }
            }
    
            - (void)drawColor
            {
                if (!_colorLayer)
                {
                    _colorLayer = [CALayer layer];
                }
    
                _colorLayer.cornerRadius = 16.0;
                _colorLayer.backgroundColor = [[UIColor colorWithRed:r green:g blue:b alpha:1.0] CGColor];
                _colorLayer.opacity = 1.0;
    
                [self.layer insertSublayer:_colorLayer atIndex:2];
            }
    
            - (void)changeColorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue
            {
                r = red;
                g = green;
                b = blue;
                [self drawColor];
            }
            @end
    

1 个答案:

答案 0 :(得分:0)

我们在我们的应用中执行此操作。我们在按钮上使用CALayer,并添加圆角角度为组件宽度的1/2。我们为按钮添加边框,然后设置按钮背景颜色以实现“填充”颜色。效果很好。