iOS6でCore Graphicsのアフィン変換を使って絵文字を360°回転させてみたのですが、45°、135°、225°、315°が描画されず、しかもその付近の角度でも変に伸びてしまっているのが確認できます。
ほぼ同じコードで、「あ」を回してみた結果はこちら。なんら問題ありません。
再現コードです(iPad)。
#import "TestView.h"
#define AreaSize (44)
#define FontSize (30)
#define RenderCount ((int)(360))
@implementation TestView
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
UIFont *angleFont = [UIFont systemFontOfSize:10];
#if 1
UIFont *font = [UIFont fontWithName:@"AppleColorEmoji" size:FontSize];
unichar chars[] = {0xd83d, 0xde03, 0};
NSString *str = [[NSString alloc] initWithCharacters:chars length:2];
#else
UIFont *font = [UIFont systemFontOfSize:FontSize];
NSString *str = @"あ";
#endif
CGSize size = [str sizeWithFont:font];
// ちょっとずつ回転させながら絵文字を描画
float x = 0, y = 0;
for (int i = 0; i < RenderCount; i++) {
// 行列で回転&移動させる
CGContextSaveGState(c);
CGAffineTransform t = CGAffineTransformIdentity;
t = CGAffineTransformTranslate(t, x + (AreaSize - size.width) / 2, y + (AreaSize - size.height) / 2);
t = CGAffineTransformTranslate(t, +size.width / 2, +size.height / 2);
float angle = 2 * M_PI * i / RenderCount;
t = CGAffineTransformRotate(t, -angle);
t = CGAffineTransformTranslate(t, -size.width / 2, -size.height / 2);
CGContextConcatCTM(c, t);
[str drawAtPoint:CGPointZero withFont:font];
CGContextRestoreGState(c);
// 枠
UIRectFrame(CGRectMake(x, y, AreaSize, AreaSize));
// 角度文字
NSString *angleStr = [NSString stringWithFormat:@"%.1f°", angle * 180 / M_PI];
[angleStr drawAtPoint:CGPointMake(x + 2, y) withFont:angleFont];
// 次の位置へ
x += AreaSize;
if (x + AreaSize > self.bounds.size.width) {
x = 0;
y += AreaSize;
}
}
}
ちなみにiOS5では問題無く表示されますので、iOS6からの不具合かと思います。
適当にググっても、この辺のトラブルについてはまったくヒットせず困り中です。
何か解決策をお持ちの方はメールやTwitter(@takabosoft)でこっそり教えて頂けると助かります。
※公式のフォーラムやサポートにも聞いてみようと思いますが、何せ英語なのでうまく伝わるかどうか・・・。
追記
keynoteでもテキストオブジェクトを45度などにすると絵文字が消えるのを確認しました(;^ω^)














