ストロークに沿ってテキストを回転しようとしています。ユーザーはタッチでストロークを作成し、指が望む方向に移動すると、ストロークは指があるポイントまでスケーリングされます。私はストロークに沿って現在の長さを表示し、テキストショーはストロークで縮尺を変えずに回転します。ストロークに沿ってテキストを描画して回転する
私はそれほど離れていないと思います。現在のところ、テキストは常に正しい位置にあるわけではなく、回転によって異なります。コンテキストトランスレーションには何か問題があると思いますが、自分のコードを見ることができます。
これは、テキストを描画するための私の方法です:
- (void)drawText:(NSString *)text withFrame:(CGRect)rect withFont:(UIFont *)font rotation:(float)radians alignment:(NSTextAlignment)alignment context:(CGContextRef)context {
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
paragraphStyle.alignment = alignment;
NSDictionary *attributes = @{ NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle,
NSForegroundColorAttributeName: [UIColor blackColor] };
CGContextSaveGState(context);
CGContextScaleCTM(context, 1.0, 1.0);
//CGRect textSize = [text boundingRectWithSize:rect.size options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
CGContextTranslateCTM(context, rect.origin.x + (rect.size.width * 0.5), rect.origin.y + (rect.size.height * 0.5));
CGContextRotateCTM(context, radians);
CGContextTranslateCTM(context, -(rect.origin.x + (rect.size.width * 0.5)), -(rect.origin.y + (rect.size.height * 0.5)));
[[UIColor redColor] set];
CGContextFillRect(context, rect);
[text drawInRect:rect withAttributes:attributes];
CGContextRestoreGState(context);
}
私はこのようにそれを呼び出す:
CGFloat a = shapeToBeDrawn.startPoint.y - shapeToBeDrawn.endPoint.y;
CGFloat c = shapeToBeDrawn.length;
CGFloat alpha = -asin(a/c);
CGRect r = CGRectMake(shapeToBeDrawn.startPoint.x, shapeToBeDrawn.startPoint.y - 30, shapeToBeDrawn.endPoint.x - shapeToBeDrawn.startPoint.x, 20);
[self drawText:lengthStr withFrame:r withFont:[UIFont fontWithName:@"Helvetica" size:18.0f] rotation:alpha alignment:NSTextAlignmentCenter context:context];
ありイム計算角度αと私が表示したい文字列を渡します。また、図形の枠の上にあるテキストの枠も作成します。ここで
それが現在どのように見えるかの小さなビデオ:
は、誰かが私を助けることができると私の問題がクリアされている願っています。おかげ:)
そして、何のコード部分のための位置を規定しますテキスト出力? – MBo
"drawText"メソッド呼び出しの上のコード。そこに私はrectを定義します。 – Werewolve