0

我以编程方式将此按钮设置为 SegmentedSliderControl。(没有笔尖文件)

它工作得很好,但我怎样才能像这张图片一样为每个圈子添加一个标题

谢谢

4

1 回答 1

2

您可以使用 NSString 的drawInRect方法。

旧版本将是

  - (CGSize)drawInRect:(CGRect)rect 
              withFont:(UIFont *)font 
         lineBreakMode:(NSLineBreakMode)lineBreakMode 
             alignment:(NSTextAlignment)alignment

较新的 API(建议继续使用)

  - (void)drawInRect:(CGRect)rect 
      withAttributes:(NSDictionary *)attrs

您将要绘制以每个圆圈为中心的文本,这建议使用段落属性NSTextAlignmentCenter。这里有一个字体绘制方法……</p>

 - (void)drawText:(NSString*)string centeredOnX:(CGFloat)centerX {
        _textBoxRect.origin.x = centerX - _textBoxRect.size.width/2;
        NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
        paragraph.alignment = NSTextAlignmentCenter;
        NSDictionary* attributes = @{
                            NSParagraphStyleAttributeName : paragraph,
                                      NSFontAttributeName : self.font
                                    };
        [string drawInRect:_textBoxRect withAttributes:attributes];
    }

这假定您已经设置了一个UIFont* font属性和一个CGRect textBoxRect属性,该属性定义了一个用于在其中绘制文本的框。您可以为所有标签设置一次矩形的origin.y, 。只有当您沿线移动时需要更改 - 即作为.size.widthsize.heightorigin.xcenterX

(如果你想要更多的灵活性,你可以使用NSAttributedStrings而不是NSStrings。然后你可以在绘制之前获取每个字符串的大小,以确保你的盒子宽度和高度足够大。)

假设您有一个标签字符串数组,每行一个圆圈:

  self.labelStrings = @[@"2012",@"2013",@"2014",@"2015",@"2016",@"2017"];

你可以这样调用这个方法:

[self drawText:self.labelStrings[i] centeredOnX:centerPoint.x];

如果您在绘图循环中的前三个条件结束时调用它,则最终文本会漂浮在线条上每个圆圈的上方或下方。在线上方或下方的位置将由origin.yin的值确定self.textBoxRect

于 2013-09-16T00:09:38.163 回答