2012-07-11 5 views
2

je saute en plein dedans.Dessiner le texte en forme elliptique

Je dessine une bulle avec un UIBezierPath, la bulle est fine et fonctionne comme j'attendre. Le problème est de savoir comment ajouter du texte à la bulle de sorte qu'il reste à l'intérieur du UIBezierPath. Je n'ai aucune expérience en dessin de texte, et j'ai du mal à trouver des solutions possibles.

J'ai essayé d'installer un textview intérieur de la bulle, mais la solution ne fonctionne pas très bien, et je voudrais utiliser plus de la bulle de la parole. Avec le textview, je ne peux utiliser que la forme rectangle, je voudrais remplir la bulle de haut en bas, et utiliser la largeur complète au milieu.

Toute aide et suggestions seraient beaucoup appriciated.

enter image description here

+0

Si vous savez que c'est une ellipse et la taille du texte que vous dessinez sera, alors il y a certainement des équations qui vous permettra de faire ce que vous voulez. (X^2)/a^2 + (y^2)/b^2 = 1 peut facilement être adapté pour tester si un point est à l'intérieur de l'ellipse. Personnellement, je ne connais pas un moyen de le faire sans au moins une quantité modérée de maths. Vous voudrez peut-être la tête sur math.stackexchange.com – Dustin

+0

Salut Dustin, merci pour l'information. Je vais jeter un oeil à math.stackexchange.com et voir si je viens avec quelque chose. – MortenHN

+0

@MortenHN Je cherche de l'aide avec la partie bulle de discours. Vous voulez partager comment vous l'avez fait fonctionner? merci – aVC

Répondre

3

Ok, j'ai finalement compris comment dessiner/rendre le texte sur une bezierpath, il peut être fait en prenant le CGPath, et en utilisant du texte de base. Ive a fait cette méthode.

-(void)drawText:(NSString *)text { 
    CGContextRef myContext = UIGraphicsGetCurrentContext(); 

    CGContextSaveGState(myContext); 

    CGContextTranslateCTM(myContext, 0.0f, self.frame.size.height); 
    CGContextScaleCTM(myContext, 1.0f, -1.0f); 

    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attString); // 7-2 
    CTFrameRef theFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attString length]), path, NULL); // 8-2 

    CTFrameDraw(theFrame, myContext); // 11-2 
    CGContextRestoreGState(myContext); 
} 

J'ai suivi ce tutoriel, qui est excellent. Maintenant, j'ai juste besoin de comprendre comment calculer la taille du bezierpath pour contenir tout le texte, et comprendre comment déplacer le bezierpath et le texte de base ensemble, ils fonctionnent sur un système de coordonnées différent et me donne toutes sortes de problèmes. Donc, si quelqu'un a de l'expérience avec cela, je suis tout ouïe!

Cordialement Morten

+0

Le tutoriel que vous avez cité est remarquable. Non seulement fournit-il le contenu technique, il est lisible;) avec la grammaire, l'orthographe appropriée, etc. – mobibob