このボタンをプログラムで SegmentedSliderControl として作成しました。(nibファイルなし)
うまく機能していますが、この写真のように各円にタイトルを追加するにはどうすればよいですか
ありがとう
このボタンをプログラムで SegmentedSliderControl として作成しました。(nibファイルなし)
うまく機能していますが、この写真のように各円にタイトルを追加するにはどうすればよいですか
ありがとう
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
、テキストを描画するためのボックスを定義するプロパティを設定していることを前提としています。すべてのラベルに対してrect のorigin.y
,size.width
を1 回設定できます。size.height
ラインに沿って移動するときに変更するorigin.x
必要があるのは、 としてメソッドに渡されるだけcenterX
です。
(さらに柔軟性が必要な場合は、NSAttributedStrings
代わりに を使用できNSStrings
ます。次に、描画する前に各文字列のサイズを取得して、ボックスの幅と高さが十分な大きさであることを確認します。)
線上の円ごとに 1 つずつ、ラベル文字列の配列があると仮定します。
self.labelStrings = @[@"2012",@"2013",@"2014",@"2015",@"2016",@"2017"];
このメソッドを次のように呼び出します。
[self drawText:self.labelStrings[i] centeredOnX:centerPoint.x];
描画ループの最初の 3 つの条件の最後でこれを呼び出すと、行の各円の上または下にテキストが浮いてしまいます。origin.y
線の上または下の位置は、 inの値によって決まりますself.textBoxRect
。