从UISegmentedControl

问题描述:

enter image description here从UISegmentedControl

取出白色渐变我如何摆脱,或在UISegmentedControl(酒吧风格)改变白色渐变?

我发现的唯一方法是在每个细分区上绘制一层。 坏消息是,那么你必须自己着色选定的部分每次它改变(和“decolonizee”未选中) 好消息是,你可以有许多不同的颜色为每个单独的一组,并显示一个红色附近的绿色附近的蓝...

,你可以打电话给你的方法时的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的初始阵列(也可以单击时偶然秩序,但于需要最初的一个),所以在你的init试试这个:

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 需要导入石英FRAM ework

+0

这看起来非常好,你能发布源? – Andyy 2011-12-19 07:14:32

+0

@andy:来源?你的意思是“代码”?我做了,几乎所有你需要的,你只需要声明UIColor(s)和initialStateArraySegmentedControl作为NSArray ...把​​这段代码放在拥有SegmentedControl的UIViewController中...你还需要什么?你有什么疑问? – meronix 2011-12-19 08:29:34

+0

这似乎删除了分段控件上的圆角。有什么方法可以保留它们吗? – MobileMon 2013-06-10 15:35:08