Y a-t-il un moyen de fournir ce type d'effet dans un UITextView
? Si non, alors comment puis-je obtenir cet effet?Affichage d'un bloc de texte avec une lettre initiale surdimensionnée dans un UITextView
Répondre
Avoir la même exigence, je crée une sous-classe UIView
qui dessine le texte avec une lettrine. Le texte est dessiné en utilisant le texte de base, et comme @CodaFi a suggéré que la limite de chute est dessinée dans un cadre de texte de base séparé.
La mise en œuvre complète de la classe: https://gist.github.com/4596476
La viande de celui-ci ressemble à quelque chose comme ceci:
- (void)drawRect:(CGRect)rect {
// Create attributed strings
NSAttributedString *bodyText = [[NSAttributedString alloc] initWithString:[self.text substringWithRange:NSMakeRange(1, self.text.length -1)] attributes:_bodyAttributes];
NSAttributedString *capText = [[NSAttributedString alloc] initWithString:[[self.text substringWithRange:NSMakeRange(0, 1)] uppercaseString] attributes:_capAttributes];
CGRect capFrame = CGRectMake(0, 0, [capText size].width, [capText size].height);
// Set up graphics context
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// Create type frames
CGMutablePathRef bodyPath = CGPathCreateMutable();
CGAffineTransform transform = CGAffineTransformTranslate(CGAffineTransformMakeScale(1, -1), 0, -self.bounds.size.height);
CGPathMoveToPoint(bodyPath, &transform, CGRectGetMaxX(capFrame), 0);
CGPathAddLineToPoint(bodyPath, &transform, self.bounds.size.width, 0);
CGPathAddLineToPoint(bodyPath, &transform, self.bounds.size.width, self.bounds.size.height);
CGPathAddLineToPoint(bodyPath, &transform, 0, self.bounds.size.height);
CGPathAddLineToPoint(bodyPath, &transform, 0, CGRectGetMaxY(capFrame));
CGPathAddLineToPoint(bodyPath, &transform, CGRectGetMaxX(capFrame), CGRectGetMaxY(capFrame));
CGPathCloseSubpath(bodyPath);
CGMutablePathRef capPath = CGPathCreateMutable();
CGPathAddRect(capPath, &transform, CGRectMake(0, 0, capFrame.size.width+10, capFrame.size.height+10));
// Draw text
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) bodyText);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), bodyPath, NULL);
CFRelease(framesetter);
CTFrameDraw(frame, context);
CFRelease(frame);
framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)capText);
frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), capPath, NULL);
CFRelease(framesetter);
CTFrameDraw(frame, context);
CFRelease(frame);
}
L'essentiel de c'est de créer deux chemins, un rectangle contenant la lettrine, et un rectangle avec une encoche enlevée pour le reste du texte. L'implémentation complète sur gist vous permet de contrôler les polices, l'espacement autour de la lettrine et l'encart de contenu de l'ensemble de la vue à l'aide des propriétés.
Il n'implémente pas la plupart des fonctionnalités d'un UITextView
(uniquement les fonctionnalités dont j'avais besoin), donc ce n'est peut-être pas une solution complète.
Espérons que ça aide!
Salut, merci pour votre réponse. C'est un grand effort que vous avez fait. Mais j'ai déjà réalisé cette exigence à moi avec HTML :). –
Oui, c'était une vieille question, mais j'espère que ça sera utile à quelqu'un d'autre! J'ai d'abord utilisé html, mais webkit a fini par être beaucoup trop lent pour mon application. –
- 1. Affichage lettre minuterie par lettre iphone
- 2. Redimensionner un UITextView avec une hauteur maximale
- 3. Comment obtenir un texte rect dans UITextView
- 4. Affichage du contenu PDF dans UITextView
- 5. Animer l'affichage de texte sur un bloc de texte WP7
- 6. Objectif C - Affichage des données dans UITextView
- 7. UITextView problème avec texte défilant
- 8. Remplacer du texte dans un UITextView
- 9. raccourci multi-lettre dans le bloc-notes ++
- 10. SVG surdimensionnée sur charge
- 11. Comment lier une variable avec un bloc de texte
- 12. UITextView position de défilement initiale n'est pas 0
- 13. Affichage du pendu trouvé lettre
- 14. Deux colonnes de texte dans UITextView?
- 15. affichage Firefox = problème de bloc
- 16. UITextView cacher du texte
- 17. Formatage dans un UITextView
- 18. Affichage de transition CSS: bloc
- 19. iphone UitextView Texte coupé
- 20. Affichage d'une alerte avec une zone de texte dans l'iPhone
- 21. partition une liste de noms dans des dossiers par lettre initiale
- 22. Comment afficher une valeur initiale dans le champ de texte?
- 23. Organiser les éléments de la liste dans l'ordre alphabétique dans un tableau, avec des séparateurs de liste comme lettre initiale
- 24. Désactiver la sélection de texte dans UITextView
- 25. affichage: bloc en ligne avec bordure?
- 26. Objective-C, le style personnalisé de la première lettre UITextView
- 27. Sauvegarder le texte de UITextVIEW?
- 28. HTML/CSS: Affichage: bloc avec un flottant ou un bloc en ligne
- 29. Affichage jquery affixe: bloc
- 30. UITextView n'affiche pas de texte
Les lettrines sont étranges dans le texte principal, vous devrez rendre une lettre extra large avec un appel CTFrameDraw supplémentaire. – CodaFi
@CodaFi Bonjour, Merci pour votre réponse. Pouvez-vous s'il vous plaît élaborer un peu ou me fournir un tutoriel ou quoi que ce soit pour cela? –
@ josh-caswell: Merci pour votre modification. –