2014年9月14日日曜日

iOS7でのdrawAtPoint/drawInRectについて

iOS6までに存在したNSStringの
 - (CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font
 - (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font
はiOS7で非推奨になった。

代替メソッドとしては
 - (void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs
 - (void)drawInRect:(CGRect)rect withAttributes:(NSDictionary *)attrs
が紹介されているが、実はこれらには描画色に関して重大な違いがある。

代替メソッドについて書かれてるサイトはあったけど描画色について書かれているところは見つけられなかったのでここに書いておく。

iOS6の

 - (CGSize)drawAtPoint:(CGPoint)point withFont:(UIFont *)font
 - (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font

は[UIColor set]で設定された現在の描画色で描画されるが、iOS7の

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

はそれでは描画されない。常に黒になる。

 ではどうやって描画色を指定するかといえば、attrsに入れる。すなわち、
    NSDictionary *atrb=@{
                         NSFontAttributeName : font,
                         NSForegroundColorAttributeName:color
                         };
    [self drawAtPoint:point withAttributes:atrb];
である。

本当なら[UIColor set]で設定された現在の描画色を得る方法があれば、それを読み取ってcolorに入れればいいが、その方法がないので、、描画色は他に変数に入れて管理しておく必要がある。

アップルはこういう重大な変更を平気でするから困る。変えるなら変えるでちゃんと告知して、正確な代替案を出してほしい。このことがわかるのに半日もかかってしまった。

X-BASIC for iOSの次バージョンは、この問題を超えて発表まであと少し。今回は機能追加なし。

0 件のコメント:

コメントを投稿