0

このボタンをプログラムで SegmentedSliderControl として作成しました。(nibファイルなし)

うまく機能していますが、この写真のように各円にタイトルを追加するにはどうすればよいですか

ありがとう

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、テキストを描画するためのボックスを定義するプロパティを設定していることを前提としています。すべてのラベルに対して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

于 2013-09-16T00:09:38.163 に答える