縦書きの実現について

UITextViewを使う

  • 行間の設定がわからない→一文字ずつ位置を計算して描画?
  • テキストの回転がわからない→地道に一文字ずつ回転?
  • ZAttributedStringその他を使う→縦書きのAttributesが無いっぽい!?



  1. CGContextGetTextPositionを呼んで現在のテキスト位置を得る
  2. テキスト描画モードを不可視に設定しCGContextSetTextDrawingModeを使う
  3. CGContextShowTextを呼んでテキストを描画する、テキスト位置にテキストを描画
  4. CGContextGetTextPositionで最終テキスト位置を決める
  5. 終端位置から開始位置を差し引いて、テキストの幅を決定

	for (int i = 0; i < [paragraphs count]; i++) {
		// これから段落文字列を行に分割していく
		//NSMutableArray* lines;
		NSMutableString* paragraph;
		paragraph = [[paragraphs objectAtIndex:i] mutableCopy];
		int len = [paragraph length];
		if (len > 20) {
			// 最大文字数(二十文字)以上は分割しなければいけない
			// 20文字目が禁則文字なら20で改行せず、19文字で改行
			if ([paragraph characterAtIndex:20] == @"、" || [paragraph characterAtIndex:20] == @"。") {
				NSLog(@"%@なので、禁則処理+改行しないと", [paragraph characterAtIndex:20]);
			}
			[paragraph insertString:@"\n" atIndex:20]; 
		}
		[paragraphs replaceObjectAtIndex:i withObject:paragraph];
		
	}

UIWebViewを使う

  • まだ試して無い

UIScrollViewを使う

  • テキストビューと変わらない?

iPad+CoreTextを使う

  • コアテキストの設定が面倒で頓挫中


情報をいろいろ収集
  • CoreTextはUIStringDrawingと同じ表示はできねーよって書いて合った
http://twitter.com/shn/statuses/15431728052
[NSString(UIStringDrawing) drawAtPoint:forWidth:withFont:lineBreakMode:letterSpacing:includeEmoji:]



試したこと

NaviControllerでやる→ステータスバーが出入するときに、一緒にずれるのが嫌だ
  • ステータスバーが悪い?→解決難しい
  • NaviControllerが悪い?→ナビ使わずに
    • ナビ使わずに→ビューの上に重ねてしまうとイベントが反応しない。

  • ToDo:デバッグでライブラリのどこを実行しているかを突き止める

CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetFont(context, _cgFont);
CGContextSetFontSize(context, _size);
if( _stroke )
	CGContextSetTextDrawingMode (context, kCGTextStroke);
else
	CGContextSetTextDrawingMode (context, kCGTextFill);
CGAffineTransform transform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);		
CGContextSetTextMatrix(context, transform);

int count = [string length];
CGGlyph* glyphs = malloc(sizeof(CGGlyph)*count);
for(int i = 0; i < count; i++) {
	glyphs[i] = _glyphs[[string characterAtIndex:i]];
}
CGContextShowGlyphsAtPoint(context, point.x, point.y, glyphs, count);

free(glyphs);

タグ:

+ タグ編集
  • タグ:
最終更新:2010年07月20日 11:41
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。