2014-12-17 3 views
0

Так что я пытаюсь вставить оба изображения и текст в UISegmentControl. Теперь в этом segmentControl. Я ищу, чтобы разместить изображение сверху и текст внизу. Так что я использую категорию на UIImage, чтобы нанести на нее название, как показано ниже. Однако мое изображение и текст по-прежнему неуместны после многих усилий. Кто-нибудь сделал это раньше, чем правильно? Любая помощь приветствуется.Центрирование изображения и вертикально в UISegmentControl ios?

+ (id)imageFromImage:(UIImage*)image string:(NSString*)string color:(UIColor*)color 
{ 

    UIFont *font = [UIFont fontWithName:@"Helvetica" size:16]; 
    CGSize expectedTextSize = [string sizeWithAttributes:@{NSFontAttributeName: font}]; 
    int width = expectedTextSize.width + image.size.width + 5; 
    int height = MAX(expectedTextSize.height, image.size.width); 
    CGSize size = CGSizeMake((float)width, (float)height); 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetFillColorWithColor(context, color.CGColor); 

    int fontTopPosition = (height + expectedTextSize.height)/2; 

    CGPoint textPoint = CGPointMake(image.size.width/2, fontTopPosition); 

    [string drawAtPoint:textPoint withAttributes:@{NSFontAttributeName: font}]; 
    // Images upside down so flip them 
    CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, size.height); 
    CGContextConcatCTM(context, flipVertical); 

    CGContextDrawImage(context, (CGRect){ {50,0},{image.size.width-10,image.size.height-10}}, [image CGImage]); 

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
+0

Непонятно, как? Не могли бы вы описать, что пошло не так? Я рад запустить ваш код и посмотреть, что он делает, но какую проблему я должен искать? В конце концов, изображение и строка, вероятно, размещаются именно там, где их код ставит, так как я знаю, что вы намерены, если ваш код не выражает это? – matt

+0

На самом деле мое название уходит далеко внизу в сегменте, поэтому почти делает его невидимым ... и для изображения я даю x = 50 значение. Так что это не идеально, не так ли? . Я имею в виду предоставление жестко заданной ценности. Но я не знаю другого подхода на данный момент. – iSD

+0

Ладно, проблема заключается не в том, что изображение и строка рисуются «неуместными», но все это прекрасно подходит для сегмента? – matt

ответ

0

Я не собираюсь переписывать ваш код для вас, но я определенно хочу показать вам выход из леса. Первый шаг - прекратить использование CGContextDrawImage, так как это связано с сложностями «переворачивания» и трансформаций. Вы должны избавиться от всего этого. Чтобы нарисовать изображение в вашем изображении, просто нарисуйте его! Используйте метод UIImage drawAtPoint: или (если вам нужно изменить размер по ходу дела) drawInRect:. Затем вы можете легко разместить изображение именно там, где хотите.

Меня также беспокоит весь вопрос о том, насколько велика ваша конечная картина. Вы создаете окончательный размер вашего изображения в:

CGSize size = CGSizeMake((float)width, (float)height); 
UIGraphicsBeginImageContextWithOptions(size, NO, 0); 

Так, если изображение выходит неправильный размер, то вам нужно изменить, как вы вычисляете, что width и height. То, что я предлагаю вам сделать, просто противоположно тому, что вы сейчас делаете. Вместо того, чтобы позволить изображению и тексту сообщать вам, что делать, начните с размера, который вы действительно хотите для изображения, которое будет хорошо вписываться в ваш сегмент, а затем вставьте изображение и текст в него, когда вы рисуете.

+0

Смотрите этот раздел моей книги: http://www.apeth.com/iOSBook/ch15.html#_uiimage_drawing - посмотрите, в частности, на второй пример, где я поместил измененный рисунок _exactly_, где я хочу его, вычислив его размер и позицию на основе по его первоначальному размеру. – matt

Смежные вопросы