Използвам UIImageView с contentMode:UIViewContentModeScaleAspectFill, който съдържа изображение, което не запълва изцяло UIImageView.
Например UIImageView има размер: width=480;height=180, но изображението вътре има само размер: width=320;height=180. Следователно има ясно поле от лявата и дясната страна на 80.
Създадох тази функция, за да запълня тези 80px с модел на първия правоъгълник 1x180px:
- (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 или от някъде другаде?