带有方向或箭头主题的UISegmentedControl

我用cocoacontrols.comBASequenceControl实现了UISegmentedControl 方向主题。

我已经添加了BASequenceControl.hBASequenceControl.m类和GitHub所需的图像

大。 它的工作对我来说很好..但是我有一个关于最后一个细分市场小费的问题。

它显示最后一个段的垃圾空间。

原始屏幕截图

在这里输入图像说明

我需要这个

在这里输入图像说明

我已经实现的代码

#import "BASequenceControl.h" BASequenceControl *bASequenceControl = [[BASequenceControl alloc] init]; bASequenceControl.frame = CGRectMake(10, 10, 200, 44); [bASequenceControl addSegmentWithTitle:@"First" animated:NO]; [bASequenceControl addSegmentWithTitle:@"Second" animated:NO]; bASequenceControl.leftMargin = -22; bASequenceControl.rightMargin = 0; bASequenceControl.overlapWidth = 22; [self.view addSubview:bASequenceControl]; 

任何帮助,这是表示赞赏。

谢谢。

这是一个非常简单的修复。 您将不得不编辑BASequenceControl.m文件,或者您可以复制类并重命名它。

引起问题的线在drawRect:它基本上在控件的整个背景上绘制灰色箭头。 在空白处创build一个漂亮的渐变。

 [passiveSegmentImage drawInRect:CGRectMake(-passiveSegmentImage.size.width, 0, w + 2 * passiveSegmentImage.size.width, h)]; 

您可以将其更改为:

 [passiveSegmentImage drawInRect:CGRectMake(0, 0, w, h)]; 

现在你必须告诉控制器它不应该是不透明的。 像这样更新初始化程序。

 - (void)awakeFromNib { _selectedSegmentIndex = -1; [self setOpaque:NO]; [super awakeFromNib]; } - (id)init { if ((self = [super init])) { [self setOpaque:NO]; _selectedSegmentIndex = -1; } return self; } 

这是非常快速和肮脏的,你可能会使这个属性设置。 然后向BaseAppKit提交一个请求,但是我会把这个请求留给你。 这里有一个要点,您可以直接在BASequenceControl.m中复制和粘贴来修复悬垂。 https://gist.github.com/4632686

编辑:确保您使用init作为初始化程序,然后setFrame:我不太确定为什么initWithFrame:没有在类中重写。

 BASequenceControl *control = [[BASequenceControl alloc] init]; [control setFrame:CGRectMake(0, 0, 300, 40)]; 

固定的控制,绿色的戏剧性的效果

绿色背景戏剧性的效果

如何使用这样的面具:

在这里输入图像说明

掩盖你的SegmentedControl