2013-03-05 3 views
0

У меня есть два UIImageViews, и я хочу скопировать изображение с одного на другое и настроить цвет, но это вызывает странное растяжение.UIImage Рисунок с цветом

Вот код, который я использую, чтобы сделать копию:

_selectedIcon.image = groupView.icon; 
[ViewUtils colorImageView:_selectedIcon withRed:0.843 Green:0.3176 andBlue:0.066667]; 

Если я использую только первую строку он копирует изображение штрафа и выглядит следующим образом:

Correct

Это немного больше, потому что он должен выглядеть подсвеченным. Но он копируется и масштабируется правильно. Затем, когда я пытаюсь его цвет, он делает это:

Wrong

Вот код, который я использую, чтобы цвет изображения:

+(void)colorImageView:(UIImageView*)source withRed:(CGFloat)red Green:(float)green andBlue:(float)blue 
{ 
    // Create a context containing the image. 
    UIGraphicsBeginImageContext(source.bounds.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // The mask needs to be upside down for some reason 
    CGContextTranslateCTM(context, 0, source.bounds.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 
    CGContextClipToMask(context, source.bounds, [source.image CGImage]); 
    CGContextFillRect(context, source.bounds); 

    [[UIColor colorWithRed:red green:green blue:blue alpha:1.0] set]; 
    UIBezierPath *imagePath = [UIBezierPath bezierPathWithRect:source.bounds]; 
    [imagePath fill]; 
    // Retrieve the new image. 
    source.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 

У меня есть Пытается много различных способов масштабирования изображения в цветовом коде и ничего не работает. У кого-нибудь есть предложение?

ответ

0

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

float ratioX = source.bounds.size.width/source.image.size.width; 
float ratioY = source.bounds.size.height/source.image.size.height; 
float ratio = MIN(ratioX, ratioY); 
CGRect bounds = CGRectMake(0, 0, source.image.size.width * ratio, source.image.size.height * ratio); 
Смежные вопросы