2013-10-09 4 views
28

私は新しいバージョンのアプリケーションで作業していますが、廃止予定のメッセージを置き換えようとしていますが、これを越えることはできません。drawInRect:withAttributesとdrawInRect:withFont:lineBreakMode:alignment

なぜdrawInRect:withAttributesが機能していないのかわかりません。 drawInRect:withFont:lineBreakMode:alignmentメッセージを送信するとコードが正しく表示されますが、drawInRect:withAttributesが送信された場合は機能しません。

私は同じrectとfontを使用していますが、私は同じテキストスタイルだと思います。定数はイメージのすぐ下にrectを配置するだけですが、私は両方の呼び出しに同じrectを使用していますので、矩形が正しいと確信しています。

上記
 [bs.name drawInRect:textRect 
      withAttributes:@{NSFontAttributeName:textFont, 
           NSParagraphStyleAttributeName:textStyle}]; 
から変数を使用して

(以下使用bs.nameはNSStringのオブジェクトであることに注意)

 CGRect textRect = CGRectMake(fCol*kRVCiPadAlbumColumnWidth, 
            kRVCiPadAlbumColumnWidth-kRVCiPadTextLabelYOffset, 
            kRVCiPadAlbumColumnWidth, 
            kRVCiPadTextLabelHeight); 
     NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; 
     textStyle.lineBreakMode = NSLineBreakByWordWrapping; 
     textStyle.alignment = NSTextAlignmentCenter; 
     UIFont *textFont = [UIFont systemFontOfSize:16]; 

これが動作しない(何も画面上に描画されていません)

これは、上の同じ変数を使用して、文字列が画面上に正しく描かれます。

 [bs.name drawInRect:textRect 
        withFont:textFont 
       lineBreakMode:NSLineBreakByWordWrapping 
        alignment:NSTextAlignmentCenter]; 

援助は素晴らしいでしょう。ありがとう。

+0

「drawInRect:withAttributes:」が機能しないとはどういう意味ですか? –

+0

非常に良い質問です。申し訳ありませんが私は詳しく説明しませんでした。 bs.nameに含まれる文字列は、drawInRect:withFont:lineBreakMode:alignmentメッセージを使用して正しく描画されますが、drawInRect:withAttributesメッセージを使用しているときは表示されません(何も描画されません)。 –

答えて

28

私はあなたが、私はこれらの2つの方法の出力の間に違いが表示されない

- (void)drawRect:(CGRect)frame 
{ 
    NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; 
    textStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    textStyle.alignment = NSTextAlignmentCenter; 
    UIFont *textFont = [UIFont systemFontOfSize:16]; 

    NSString *text = @"Lorem ipsum"; 

    // iOS 7 way 
    [text drawInRect:frame withAttributes:@{NSFontAttributeName:textFont, NSParagraphStyleAttributeName:textStyle}]; 

    // pre iOS 7 way 
    CGFloat margin = 16; 
    CGRect bottomFrame = CGRectMake(0, margin, frame.size.width, frame.size.height - margin); 
    [text drawInRect:bottomFrame withFont:textFont lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter]; 
} 

を提供するだけのコードを含むdrawRect:UIViewを作りました。多分、問題はあなたのコードのどこかにありますか?

+0

この回答を提供してくれてありがとう。私のコードは、UIViewのdrawRectからも実行されます。私はそれが他の場所になければならないことに同意するが、私がどちらか一方をコメントアウトすると、他方は動作しない。たぶん、四角形は、何らかの理由で、iOS 7で異なっている(iOS 7の方法はdrawInRect:withAttributesです)情報を再計算する必要があります。私はちょっと矩形をつぶしてしまいます。再度、感謝します。 –

+0

両方のメソッドに渡される 'CGRect'が同じであることを確認してください。また、1)テキストの色を変更し、2)四角形の背景を描画し、必要な位置に配置されていることを確認することもできます。これらの手順は非常に単純ですが、問題がどこにあるかを見つけるのに役立ちます。 –

+0

私はまったく同じメソッドで全く同じコードを使用しています(2つのメソッドではありません)。 drawRect:(old)をdrawRect:(new)に置き換えた場合、まったく同じ矩形を使用してコード内の同じ場所に表示されます。私はまだ困惑している。私が何かを見つけたら、私は投稿します。 –

36

テキストの色を設定するには、属性にNSForegroundColorAttributeNameを追加パラメータとして渡す必要があります。

NSDictionary *dictionary = @{ NSFontAttributeName: self.font, 
           NSParagraphStyleAttributeName: paragraphStyle, 
           NSForegroundColorAttributeName: self.textColor}; 
関連する問題