2014-12-17 5 views
0

그래서 이미지와 텍스트를 모두 UISegmentControl에 삽입하려고합니다. 지금이 segmentControl에 이미지를 놓으려고합니다. 아래에 제목을 넣으려면 UIImage에서 카테고리를 사용하고 있습니다. 그러나 내 이미지와 텍스트는 많은 노력을 한 후에도 여전히 잘못 배치되어 있습니다. 이전에 제대로 했습니까? 도움이 필요합니다.UISegmentControl에서 이미지를 가운데에 맞 춥니 다?

+ (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); 

그래서, 당신은 변경해야 widthheight 그. 내가하는 제안은 지금하고있는 일과 정반대입니다. 이미지와 텍스트가 무엇을해야하는지 알려주는 대신 세그먼트에 잘 들어 맞는 이미지에 대해 원하는 크기로 시작한 다음 그릴 때 이미지와 텍스트를 맞춰보십시오.

+0

내 책의이 섹션을 참조하십시오. http://www.apeth.com/iOSBook/ch15.html#_uiimage_drawing - 크기와 위치를 기반으로 크기를 계산하여 크기가 조정 된 그림을 배치하는 두 번째 예제를 특히보십시오. 그것의 본래 크기에. – matt