2

色選択スライダーを表示/非表示にするボタンを作成しようとしています。それは簡単な部分です。

どうすればよいかわからないのは、ボタンを輪郭のある円(黒など)にし、塗りつぶしをスライダーに表示される色にすることです。ユーザーがスライダーを動かすと、それに応じて円の色が変化します。

私は iOS 開発に不慣れなので、おそらくこれはすべて間違っています。私がここに持っているものとは完全に異なっていても、どんなアイデアでも本当に感謝しています.

私は QuartzCore レイヤーを使用するサブクラスでこれに取り組み始めました。結果はまともですが、気になる問題/事柄があります:

  1. 何らかの理由で、ボタンを押してもハイライト状態になりません
  2. 丸みを帯びた角を使用して円を実現するのは明らかに奇妙です
  3. 残念ながら、レイヤーを描画した時点では、ボタンはまだレイアウトされていないようです。そのため、ボタンのサイズに基づいて半径を作成するのではなく、半径をハードコーディングする必要がありました。

だから、ええ、私はこのアプローチが理想的だとはほとんど思いません。すべての助けに感謝します。ありがとうございました!

        #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
4

1 に答える 1

0

これはアプリで行います。ボタンに CALayer を使用し、コンポーネント幅の 1/2 のサイズの丸い角を追加します。ボタンに境界線を追加し、ボタンの背景色を設定して「塗りつぶし」の色を実現します。うまくいきます。

于 2015-06-15T22:10:21.450 に答える