我已经使用cocoacontrols.com中的BASequenceControl实现了带有Directions主题的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:中,它基本上在控件的整个背景上绘制了灰色箭头。在空白处创建一个不错的渐变。

[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)];




绿色背景带来戏剧性的效果

09-08 01:53