Рисовать подчеркнутый / зачеркнутый текст (MULTILINE STRING)? - PullRequest
5 голосов
/ 16 апреля 2010

Я должен нарисовать подчеркнутый многострочный текст со всеми типами выравнивания текста. Я искал на форумах и получил некоторые результаты, такие как:

http://davidjhinson.wordpress.com/2009/11/26/underline-text-on-the-iphone/

http://forums.macrumors.com/showthread.php?t=561572

Но все рисуют текст только для одной строки. пока у меня есть многострочный текст. Ситуация даже ухудшается, когда выравнивание текста происходит по центру. Я искал и обнаружил, что в iphone-sdk-3.2 есть некоторые атрибуты core-text для подчеркивания текста, но не знаю, как это использовать. Кроме того, если бы я использовал их, моя проблема не была бы полностью решена.

Поскольку я также должен нарисовать зачеркнутый текст.

Если у вас есть идеи по этому поводу, пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2010

Как насчет этого. Это хорошо работает для меня, что вы все думаете, если это требует некоторой оптимизации?

CGContextSetFillColorWithColor(c, [[UIColor blackColor] CGColor]);          //THE TEXT COLOR OF THE STRING TO BE DRAWN.

            UIFont *fontName = [UIFont fontWithStyle:@"Arial-BoldMT" andFontSize:13];

            if(FontOverLayUnderLine || FontOverLayStrikeThrough){

                NSArray *stringsArray = [textString componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
                CGContextSetStrokeColorWithColor(c, [appDel.textDisplayStyle.fillColor CGColor]);
                CGContextSetLineWidth(c, 1.0);
                CGSize stringSize;
                NSString *stringToDraw;
                for (int i = 0 ; i < [stringsArray count]; i++) {

                    stringToDraw = [stringsArray objectAtIndex:i];

                    if(![[stringToDraw stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:@""]){

                        stringSize = [stringToDraw sizeWithFont:fontName forWidth:rect.size.width lineBreakMode:UILineBreakModeCharacterWrap];

                        float x = rect.origin.x + (rect.size.width-stringSize.width)/2 + 7;
                        float y = 4 + stringSize.height*i;

                        [stringToDraw drawAtPoint:CGPointMake(x, y) forWidth:stringSize.width withFont:fontName lineBreakMode:UILineBreakModeCharacterWrap];

                        if(FontOverLayUnderLine)
                            y += (1.05) * stringSize.height*i +1;
                        else
                            y += (stringSize.height/2)+1;

                        CGContextMoveToPoint(c, x, y);
                        CGContextAddLineToPoint(c, x+stringSize.width, y);
                        CGContextStrokePath(c);
                    }
                }

            }

Надеюсь, это хорошо для всех.

Спасибо

Madhup

1 голос
/ 16 апреля 2010

Использовать основной текст.

Я искал и обнаружил, что в iphone-sdk-3.2 есть некоторые атрибуты основного текста для подчеркивания текста, но не знаю, как его использовать.

Вот для чего документация .

...