UISegmentedControl оттенок цвета на ощупь - PullRequest
2 голосов
/ 10 апреля 2010

В моем приложении есть UISegmentedControl (см. Код ниже):

// --------------- SETTING NAVIGATION BAR RIGHT BUTTONS
NSArray *segControlItems = [NSArray arrayWithObjects:[UIImage imageNamed:@"up.png"],[UIImage imageNamed:@"down.png"], nil];
segControl = [[UISegmentedControl alloc] initWithItems:segControlItems];
segControl.segmentedControlStyle = UISegmentedControlStyleBar;
segControl.momentary = YES;
segControl.frame = CGRectMake(25.0, 7, 65.0, 30.0);
segControl.tintColor = [UIColor blackColor];
[segControl addTarget:self action:@selector(segAction:) forControlEvents:UIControlEventValueChanged];

if (current == 0) [segControl setEnabled:NO forSegmentAtIndex:0];
if (current == ([news count]-1)) [segControl setEnabled:NO forSegmentAtIndex:1];
// ---------------

Но я не могу показать что-то, когда вы нажимаете на нее ...

Он функционально работает отлично, но я бы хотел, чтобы он стал серым, когда вы нажимаете на него (но только когда вы нажимаете) ... это было бы возможно?

Спасибо,

Готье.

Ответы [ 3 ]

2 голосов
/ 26 октября 2010

Похоже, что оттенок выбранного сегмента сделан темнее, чем исходный оттенок. Поэтому, если ваш оттенок черный, цвет оттенка выбранного сегмента не изменится, поскольку нет ничего темнее этого.

Я осмотрелся и не нашел хорошего способа управления цветом оттенка выбранного сегмента для этого элемента управления.

1 голос
/ 06 января 2011

Рецепт для создания собственных сегментированных элементов управления, которые (я полагаю) можно настроить так, как вы хотите:

сегментированный пользовательский контроль idevrecipes

Кстати: очень очень интересный сайт!

0 голосов
/ 25 июня 2012

Попробуй это. Это работает, если вы используете заголовки сегментов, вам может потребоваться изменить его, если вы используете изображения.

segControl.segmentedControlStyle = UISegmentedControlStyleBar;
[segControl addTarget:self action:@selector(changeColors:) forControlEvents:UIControlEventValueChanged];    

-(IBAction)changeColors:(UISegmentedControl *)sc{
    for (int i=0; i<sc.numberOfSegments; i++) {
        // reset all the titles in the segmented control
        [sc setTitle:[NSString stringWithFormat:@"%i", i] forSegmentAtIndex:i];
    }

    if (sc.selectedSegmentIndex < 0 || sc.selectedSegmentIndex >= sc.numberOfSegments) {
        return;
    }

    CGFloat width = sc.frame.size.width / sc.numberOfSegments - 1;
    CGRect rect = CGRectMake(0, 0, width, sc.frame.size.height - 2);

    UIGraphicsBeginImageContextWithOptions(rect.size, NO, [UIScreen mainScreen].scale);
    CGContextRef ctx = UIGraphicsGetCurrentContext();

    // background gradient
    UIColor *colorOne = [UIColor colorWithWhite:0.6 alpha:1.0]; //top of gradient
    UIColor *colorTwo = [UIColor colorWithWhite:0.4 alpha:1.0]; //bottom of gradient
    NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, (id)colorTwo.CGColor, nil];
    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColors(space, (__bridge CFArrayRef)colors, NULL);
    CGContextDrawLinearGradient(ctx, gradient, CGPointMake(0,0), CGPointMake(0,rect.size.height), 0);

    // black shadow at the top
    colors = [NSArray arrayWithObjects:(id)[UIColor colorWithWhite:0.0 alpha:0.3].CGColor, (id)[UIColor clearColor].CGColor, nil];
    gradient = CGGradientCreateWithColors(space, (__bridge CFArrayRef)colors, NULL);
    CGContextDrawLinearGradient(ctx, gradient, CGPointMake(0,0), CGPointMake(0,2.0), 0);

    UILabel * title = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, width, sc.frame.size.height - 4)];
    title.text = [sc titleForSegmentAtIndex:sc.selectedSegmentIndex];
    title.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0];
    title.textAlignment = UITextAlignmentCenter;
    title.textColor = [UIColor whiteColor];
    title.backgroundColor = [UIColor clearColor];
    title.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    title.shadowOffset = CGSizeMake(0, -0.5);
    [title.layer renderInContext:ctx];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [sc setImage:img forSegmentAtIndex:sc.selectedSegmentIndex];
}
...