我以编程方式将此按钮设置为 SegmentedSliderControl。(没有笔尖文件)
它工作得很好,但我怎样才能像这张图片一样为每个圈子添加一个标题
谢谢
您可以使用 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.width
size.height
origin.x
centerX
(如果你想要更多的灵活性,你可以使用NSAttributedStrings
而不是NSStrings
。然后你可以在绘制之前获取每个字符串的大小,以确保你的盒子宽度和高度足够大。)
假设您有一个标签字符串数组,每行一个圆圈:
self.labelStrings = @[@"2012",@"2013",@"2014",@"2015",@"2016",@"2017"];
你可以这样调用这个方法:
[self drawText:self.labelStrings[i] centeredOnX:centerPoint.x];
如果您在绘图循环中的前三个条件结束时调用它,则最终文本会漂浮在线条上每个圆圈的上方或下方。在线上方或下方的位置将由origin.y
in的值确定self.textBoxRect
。