2016-03-27 13 views
1

私はUIImageの上にテキストラベルを追加しています。テキストラベルを追加できましたが、垂直になるように90度回転したいと思います。UITextViewは回転しません

これは私が持っているコードです:

UIGraphicsBeginImageContext(image.size); 
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)]; 

UITextView *myText = [[UITextView alloc] init]; 
myText.font = [UIFont fontWithName:@"font-name" size:300.0f]; 
myText.textColor = [UIColor whiteColor]; 
myText.text = @"Text"; 
myText.backgroundColor = [UIColor clearColor]; 
[myText setTransform:CGAffineTransformMakeRotation(-90* M_PI/180)]; 

CGSize maximumLabelSize = CGSizeMake(image.size.width,image.size.height); 
CGSize expectedLabelSize = [myText.text sizeWithFont:myText.font 
            constrainedToSize:maximumLabelSize 
             lineBreakMode:UILineBreakModeWordWrap]; 


myText.frame = CGRectMake(image.size.width - expectedLabelSize.width, image.size.height - expectedLabelSize.height, image.size.width, image.size.height); 

[[UIColor whiteColor] set]; 
[myText.text drawInRect:myText.frame withFont:myText.font]; 
UIImage *myNewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

私はこの使用してテキストビューを変換しようとした:

[myText setTransform:CGAffineTransformMakeRotation(-90* M_PI/180)]; 

など:

[myText setTransform:CGAffineTransformMakeRotation(-M_PI/2)]; 

しかし、それは働いていないがまったく何も起こりません。助けていただければ幸いです!

+0

'UITextView'の代わりに' UILabel'を使用できますか? –

+0

@ 3308310私はそれを「UILabel」に変更しようとしましたが、何の効果もありませんでした。 –

答えて

2

[myText.text drawInRect:myText.frame withFont:myText.font];を使用してテキストを描画していますが、テキストを取得しているビューを回転しています。このように文字列を描きたい場合は、コンテキストを回転させて描画する必要があります。例:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSaveGState(context); 
CGContextRotateCTM(context,-M_PI/2); 
[myText.text drawInRect:myText.frame withFont:myText.font]; 
CGContextRestoreGState(context); 

これは基本的にキャンバスを回転させ、文字列を描き、次にキャンバスを元に戻します。

透明な背景のあるビューを回転させるのは簡単でしょう。

+0

私は見る!しかし、それをこのように回転させた後、テキストは見えないので、画像自体の外に出るようです。新しいCGRectMakeを作成する必要はありますか? –

+0

あなたは自分でジオメトリを作成する必要がありますが、少なくとも、画像の幅と高さを反転したいと思っています(例えば 'CGRectMake(image.size.height - expectedLabelSize.width、image。 size.width - expectedLabelSize.height、image.size.height、image.size.width);)視覚的な表現なしにこれをデバッグするのは非常に難しいですが、 – beyowulf

関連する問題