0

我已经使用来自cocoacontrols.com的BASequenceControl实现了UISegmentedControlDirection主题。

我添加了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];

对此的任何帮助表示赞赏。

谢谢。

4

2 回答 2

2

这是一个非常简单的修复。您必须编辑 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)];

固定控制,绿色为戏剧效果

戏剧效果的绿色背景

于 2013-01-25T08:24:29.760 回答
0

如何使用这样的面具:

在此处输入图像描述

掩盖您的 SegmentedControl

于 2013-01-25T03:16:28.120 回答