如何使用[UIImage resizableImageWithCapInsets:]

时间:2013-09-04 04:40:09

标签: ios uiimageview uiimage

我想拉伸尺寸为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 个答案:

答案 0 :(得分:13)

您的问题在于传递给UIEdgeInsetsMake的值。值为top,left,bottom,right。由于左上角的箭头,您需要确保左边的值足够大,从图像的左边缘到箭头的右边。

根据您发布的图片,您需要以下内容:

 UIEdgeInsetsMake(12, 32, 4, 4)

BTW - 图像应仅左+右+ 1像素宽,上+下+ 1像素高。所以你的形象不需要像现在这么大。

答案 1 :(得分:0)

拉伸在垂直方向上处理,然后在水平方向上处理(反之亦然)。所以提供top&考虑不应拉伸和垂直方向的垂直方向的底部偏移水平方向的右偏移。

答案 2 :(得分:-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;
}

希望这会对您有所帮助。