Я использую UIImageView с contentMode:UIViewContentModeScaleAspectFill, который содержит изображение, которое не полностью заполняет UIImageView.
Например, UIImageView имеет размер: ширина = 480; высота = 180, но изображение внутри имеет только размер: ширина = 320; высота = 180. Следовательно, слева и справа от 80 есть четкий запас.
Я создал эту функцию, чтобы заполнить эти 80 пикселей шаблоном первого прямоугольника 1x180 пикселей:
- (UIImage *)repeatEdgesForImage:(UIImage *)image withDesiredSize:(CGSize)size {
UIImage *result = nil;
double ratio = image.size.height / size.height;
int width = size.width * ratio;
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, image.size.height), NO, 0.0);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(0, 0, 1, image.size.height));
UIImage *fillImg = [UIImage imageWithCGImage:imageRef];
[fillImg drawAsPatternInRect:CGRectMake(0, 0, width, image.size.height)];
int offset = (width - image.size.width) / 2;
[image drawAtPoint:CGPointMake(offset, 0) blendMode:kCGBlendModeNormal alpha:1.0];
result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return result; }
Работает нормально, но результат не совсем идеальный, потому что цвета немного отличаются:
Как видите, левая и правая стороны немного отличаются по цвету. Я не уверен, происходит ли это от преобразования UIImage в CGImage или откуда-то еще?