2016-03-27 9 views
1

Ich füge eine Textbeschriftung oben auf einem UIImage hinzu. Ich bin erfolgreich in der Lage, das Textlabel hinzuzufügen, jedoch möchte ich es um 90 Grad drehen, so dass es vertikal ist.UITextView dreht sich nicht

Dies ist der Code, den ich habe:

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(); 

Ich habe versucht, die Textansicht Umwandlung dies mit:

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

sowie:

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

Aber es funktioniert nicht überhaupt passiert nichts. Würde mich über jede Hilfe freuen!

+0

Können Sie ein 'UILabel' anstelle eines' UITextView' verwenden? –

+0

@ 3308310 Ich habe versucht, es zu einem 'UILabel' zu ändern, aber es hatte keine Wirkung. –

Antwort

2

Sie zeichnen den Text mit [myText.text drawInRect:myText.frame withFont:myText.font];, aber Sie drehen die Ansicht, von der Sie den Text erhalten. Wenn Sie eine Zeichenkette auf diese Weise zeichnen möchten, müssen Sie den Kontext drehen und dann zeichnen. Zum Beispiel:

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

Dies wird im Wesentlichen die Leinwand zu drehen, die Schnur ziehen, drehen Sie die Leinwand zurück.

Es ist wahrscheinlich einfacher, nur eine Ansicht mit einem transparenten Hintergrund zu drehen.

+0

Ich sehe! Nach dem Drehen scheint der Text jedoch außerhalb des Bildes zu liegen, da es nicht sichtbar ist. Muss ich ein neues CGRectMake erstellen? –

+0

Sie müssen die Geometrie selbst berechnen, aber ich würde zumindest annehmen, dass Sie Breite und Höhe für Ihr Bild spiegeln wollen (zB 'CGRectMake (image.size.height - expectedLabelSize.width, image. size.width - expectedLabelSize.height, image.size.height, image.size.width; ') Obwohl es sehr schwierig ist, dies ohne visuelle Darstellung zu debuggen. – beyowulf

Verwandte Themen