как использовать [UIImage resizableImageWithCapInsets:]

Я хотел бы растянуть изображение размером 170x50 и показать его в виде изображения размером 240x140. Исходное изображение выглядит так:

enter image description here

Я хочу сохранить четыре угла и растянуть только центральную часть. Я использую следующий код:


    UIImage *originalImg = [UIImage imageNamed:@"ImageNamed"];
    UIImage *resizeImg = [originalImg resizableImageWithCapInsets:UIEdgeInsetsMake(20 ,10, 10, 10)];
    self.originalImgV.image = originalImg;
    self.resizedImgV.image = resizeImg;

как originalImgV, так и resizedImgV имеют значение "aspect fill". Я запускаю его на симуляторе, и результат :

enter image description here

чего я не могу понять: resizedImgV имеет 2 стрелы! Может ли кто-нибудь сказать мне, почему и как я могу использовать его правильно? Спасибо

3 ответов


ваша проблема заключается в значениях, которые вы передаете UIEdgeInsetsMake. Значения: верхний, левый, нижний, правый. Из-за стрелки в левом верхнем углу вам нужно убедиться, что ваше левое значение достаточно большое, чтобы перейти от левого края изображения к правой части стрелки.

учитывая изображение, которое вы опубликовали, вы хотите что-то вроде:

 UIEdgeInsetsMake(12, 32, 4, 4)

BTW-изображение должно быть только слева + справа + 1 пикселей в ширину и сверху + снизу + 1 пикселей в высоту. Так что ваш образ не должен быть почти таким же большой, как это.


растяжка обрабатывается в вертикальном направлении, а затем в горизонтальном направлении (или наоборот). Так обеспечьте верхние & нижние смещения рассматривая вертикальное направление которое не должно протянуть и левые & правые смещения для горизонтального направления.


использовать эту функцию, вы можете изменить размер UIImage С помощью этой функции.

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

надеюсь, это поможет вам.