Рисование NSString в CGRect

Я пытаюсь нарисовать NSString внизу моего CGRect. До сих пор я мог расположить текст вверху по центру, но мне нужно, чтобы он располагался внизу. Я также пробовал DrawAtPoint, но это не сработало. Вот мой код, который у меня сейчас есть: UIGraphicsBeginImageContext (img.size);

CGRect aRectangle = CGRectMake(0,0, img.size.width, img.size.height);
[img drawInRect:aRectangle];

[[UIColor whiteColor] set];
NSInteger fontSize = 25;
UIFont *font = [UIFont boldSystemFontOfSize: fontSize];

[text drawInRect:aRectangle withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];



UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();


person Destiny Dawn    schedule 19.09.2012    source источник


Ответы (3)


вы можете использовать метод: sizeWithFont: constrainedToSize: lineBreakMode, чтобы получить размер текста, затем вычислить левую верхнюю точку и использовать drawAtPoint для рисования текста

person blackmilk    schedule 19.09.2012
comment
Я пробовал использовать drawAtPoint для времени просмотра, но по какой-то причине он не добавляет рисунок поверх прямоугольника. - person Destiny Dawn; 19.09.2012
comment
вы также можете рисоватьInRect, но размер прямоугольника рассчитывается с помощью sizeWithFont: constrainedToSize: lineBreakMode - person blackmilk; 19.09.2012
comment
Вот весь мой код, чтобы вы могли лучше понять, что я делаю. - person Destiny Dawn; 19.09.2012
comment
Неважно, я не могу разместить столько символов в комментарии; По сути, я вызываю функцию, и она возвращает этот Rect, но по какой-то причине NSString.drawAtPoint не добавляется в Rect. - person Destiny Dawn; 19.09.2012
comment
drawAtPoint просто рисуйте одну линию, без переноса. - person blackmilk; 19.09.2012
comment
Как бы я поместил это на изображение? - person Destiny Dawn; 20.09.2012

Используйте этот метод:

 -(UIImage *)imageFromText:(NSString *)text
{
  CGSize maximumSize = CGSizeMake(300, 1000); //set width for string to wrap.
  UIFont *font = [UIFont boldSystemFontOfSize:16];
  CGSize strSize = [text sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:UILineBreakModeWordWrap];
  if (UIGraphicsBeginImageContextWithOptions != NULL)
    UIGraphicsBeginImageContextWithOptions(strSize,NO,0.0);
  else
    // iOS is < 4.0 
    UIGraphicsBeginImageContext(strSize);

  CGRect newframe = CGRectMake(0, 0, strSize.width, strSize.height);
  [text  drawInRect:newframe 
                  withFont:font 
             lineBreakMode:UILineBreakModeWordWrap 
                 alignment:UITextAlignmentLeft]; 
  UIImage *testImg = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();    
  return testImg;
}
person Paresh Navadiya    schedule 19.09.2012
comment
Я пробовал использовать ваш код, но возвращенное изображение было просто черным. Я пробовал добавить в набор [[UIColor whiteColor]]; чтобы установить цвет текста как белый, но это не сработало. - person Destiny Dawn; 19.09.2012
comment
Моя ошибка, изображение просто возвращается очень маленьким; Могу ли я просто добавить эту строку внизу UIImage? По сути, это все, что я пытаюсь сделать. - person Destiny Dawn; 20.09.2012

Я обнаружил, что этот код очень помог моей проблеме.

- (UIImage *)addText:(UIImage *)img text:(NSString *)text1{
    int w = img.size.width;
    int h = img.size.height;
    //lon = h - lon;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);

    CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
    CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1);

    char* text  = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];// "05/05/09";
    CGContextSelectFont(context, "Arial", 18, kCGEncodingMacRoman);
    CGContextSetTextDrawingMode(context, kCGTextFill);
    CGContextSetRGBFillColor(context, 255, 255, 255, 1);


    //rotate text
    CGContextShowTextAtPoint(context, 0, 5, text, strlen(text));


    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);

    return [UIImage imageWithCGImage:imageMasked];
}

person Destiny Dawn    schedule 19.09.2012