以下是作為UISegmentedControl客製化的紀錄。
先在storyboard裡面放一個UISegmentedControl。
修改背景顏色:
先在storyboard裡面放一個UISegmentedControl。
修改背景顏色:
- (void)setSegmentedControl:(UISegmentedControl *)segmentedControl
{
segmentedControl.backgroundColor = [UIColor redColor];
_segmentedControl = segmentedControl;
}
將背景顏色還原,接下來要動的是兩個segment的樣式了,這邊有兩個方法可以設定:
- setDividerImage:forLeftSegmentState:rightSegmentState:barMetrics:
- setBackgroundImage:forState:barMetrics:
這兩個一定要設定,都設定完成之後才會看得到改變,不然都會用預設的樣式。
首先要注意的是第一個方法,他代表的是兩個segment中間的樣子,比方說以原始的樣式來說,他是一條垂直的藍線。這邊要設定normal-normal、normal-selected、selected-normal三種情況時的格式。
第二個方法是segment各自的樣式,這也要配合著正常、選取兩種不同狀態去做設定,而且也要和第一個方法裡面做的設定相符合。
- (void)setSegmentedControl:(UISegmentedControl *)segmentedControl
{
[segmentedControl setDividerImage:[self underlineImageNormal] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[segmentedControl setDividerImage:[self underlineImageNormal] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[segmentedControl setDividerImage:[self underlineImageNormal] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[segmentedControl setBackgroundImage:[self underlineImageNormal] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[segmentedControl setBackgroundImage:[self underlineImageSelected] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
_segmentedControl = segmentedControl;
}
順便附上我這邊使用的image的code:
- (UIImage *)underlineImageNormal
{
return [self underlineImageForState:UIControlStateNormal];
}
- (UIImage *)underlineImageSelected
{
return [self underlineImageForState:UIControlStateSelected];
}
- (UIImage *)underlineImageForState:(UIControlState)state
{
UIColor *color = [UIColor clearColor];
if (state == UIControlStateSelected) {
color = [UIColor redColor];
}
UIGraphicsBeginImageContext(CGSizeMake(10, 44));
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, color.CGColor);
CGFloat underlineWidth = 5;
CGFloat yPosi = 44 - underlineWidth;
CGContextMoveToPoint(context, 0, yPosi);
CGContextAddLineToPoint(context, 10, yPosi);
CGContextSetLineWidth(context, underlineWidth);
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathStroke);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width*.5f-1, 0, image.size.width*.5f-1) resizingMode:UIImageResizingModeStretch];
return image;
}
當你在切換時,中間會有一點空格,這應該是由於我在第一個方法裡面都是設定空白畫面的緣故,於是乎divide的圖樣造就了這樣的空白,你可以試著填滿。
你如果仔細看的話會看到我的code裡面產生的圖片,是可拉伸的,可拉伸的圖片才能符合各種segment的尺寸,這點在你使用一般的圖片時也要注意。
留言
張貼留言