удаление белого градиента из UISegmentedControl - PullRequest
0 голосов
/ 18 декабря 2011

enter image description here

Как мне избавиться от градиента белого или изменить его в UISegmentedControl (стиль Bar) ??

1 Ответ

1 голос
/ 19 декабря 2011

Единственный способ, который я нашел, - нарисовать слой над каждым сегментом. Плохая новость заключается в том, что вам придется самостоятельно раскрашивать выбранный сегмент каждый раз, когда он изменяется (и «деколонизировать» невыбранный) хорошая новость заключается в том, что вы можете иметь много разных наборов цветов для каждого отдельного сегмента и отображать красный цвет рядом с зеленым рядом с синим ...

вы можете вызывать ваш метод при изменении segmentedControl:

- (IBAction)changeSection:(id)sender {
    UISegmentedControl *segmetedControl = sender;
    [self colorize2SegmentsWithSelected:segmetedControl.selectedSegmentIndex];
// (...)
}

и в вашем методе:

-(void)colorize2SegmentsWithSelected:(int)selected{
    switch (selected) {
        case 0:
            [self myShineGradient:[initialStateArraySegmentedControl objectAtIndex:1] withColor1:myUIColor1  withColor2:myUIColor2];

            [self myShineGradient:[initialStateArraySegmentedControl objectAtIndex:0] withColor1:myUIColor3  withColor2:myUIColor4];
            break;
        case 1:
            [self myShineGradient:[initialStateArraySegmentedControl objectAtIndex:0] withColor1:myUIColor1  withColor2:myUIColor2];

            [self myShineGradient:[initialStateArraySegmentedControl objectAtIndex:1] withColor1:myUIColor3  withColor2:myUIColor4];
            break;
// (...)
}
// (...)
}

где myColor1 и 2 - нейтральный цвет (UIColor) для невыбранных сегментов и 3 + 4 для выбранных в вашем случае, если вы хотите только один цвет, сделайте 1 цвет = вторым (и 3 = 4).

initialStateArraySegmentedControl - это начальный массив вашего segmentedControl (он может изменить порядок при нажатии, но вам нужен начальный), поэтому в вашей инициализации попробуйте следующее:

initialStateArraySegmentedControl = self.segmentedControl.subviews;
[self setColorForBackGround:self.segmentedControl withColor1:myUIColor1  withColor2:myUIColor2];

эта последняя строка должна держать угол вокруг основного вида сегментированного элемента управления

и

- (void)myShineGradient:(UIView*)myView withColor1:(UIColor*)color1  withColor2:(UIColor*)color2
{
    //   remove old personal shine layer (if any exists):
    int layerNumberNow = [[myView.layer sublayers] count];
    if (layerNumberNow>2) {
        [[[myView.layer sublayers] objectAtIndex:0] removeFromSuperlayer];
    }
    // add shine layer
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];

    [gradientLayer setBounds:[myView bounds]];
    // Center the layer inside the parent layer
    [gradientLayer setPosition:
     CGPointMake([myView bounds].size.width/2,
                 [myView bounds].size.height/2)];

    // Set the colors for the gradient to the 
    // two colors specified for high and low
    [gradientLayer setColors:
     [NSArray arrayWithObjects:
      (id)[color1 CGColor],(id)[color2 CGColor], nil]];
    [myView.layer insertSublayer:gradientLayer atIndex:layerNumberNow-2];


}
- (void)setColorForBackGround:(UIView*)myView withColor1:(UIColor*)color1 withColor2:(UIColor*)color2
{
    // add shine layer
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];

    [gradientLayer setBounds:[myView bounds]];
    // Center the layer inside the parent layer
    [gradientLayer setPosition:
     CGPointMake([myView bounds].size.width/2,
                 [myView bounds].size.height/2)];

    // Set the colors for the gradient to the 
    // two colors specified for high and low
    [gradientLayer setColors:
     [NSArray arrayWithObjects:
      (id)[color1 CGColor],(id)[color2 CGColor], nil]];

    [myView.layer setBackgroundColor:[ [UIColor colorWithRed:0 green:0 blue:0 alpha:0] CGColor]];

    [myView.layer setCornerRadius:4];
    [[myView layer] setMasksToBounds:YES];

    // Display a border around the button
    // with a 1.0 pixel width

    [[myView layer] setBorderWidth:1.0f];
    [[myView layer] setBorderColor:[ [UIColor colorWithRed:1 green:1 blue:1 alpha:.1] CGColor] ];
    ///
}

PS вам нужно импортировать кварцевые рамки

...