2

我有图像,在那个图像中我想重复水平和垂直线,所以我扩展了我的图像。

例如,我有图像 50X50,我希望它是 50x70,通过重复行 x = 15。这在 iOS 上是否可行?

编辑:

好的,我会尝试更清楚。我有图像 60x60,基本上是矩形,宽度为 60,高度为 60。现在我想通过重复 x = 40 的像素来将该图像拉伸为 80x60。或者简单地绘制它,我有:

  123456
1 XXXAXX
2 XXXAXX
3 XXXAXX
4 XXXAXX
5 XXXAXX
6 XXXAXX

我希望它是:

  12345678
1 XXXAAAXX
2 XXXAAAXX
3 XXXAAAXX
4 XXXAAAXX
5 XXXAAAXX
6 XXXAAAXX

我在第 40 行重复图像上的所有像素。我想在任意数量的图像上执行此操作。

4

3 回答 3

8

实现您想要的结果的关键是resizableImageWithCapInsets:打开UIImage。例如,下面这张 50px x 50px 的图片(注:这是@2x 版本):

具有单像素垂直红线的 Retina 比例 50x50 图像在 x 轴上偏移 15px

如果要水平拉伸红线,首先定义UIEdgeInset描述红线位置的 a:

UIEdgeInsets redLine = UIEdgeInsetsMake(0, 15, 0, 34);

这定义了从左侧偏移 15px 的图像的一个像素宽的切片。right偏移是因为可拉伸切片的34右边缘为 16px,50(图像宽度)减去 16 为 34。

现在我们有了UIEdgeInset,我们可以加载图像并创建它的可拉伸版本:

UIImage *stretchableImage = [[UIImage imageNamed:@"my_image"] resizableImageWithCapInsets:redLine];

我们可以将它分配给stretchableImage我们UIImageView需要的框架:

UIImageView *stretchedImageView = [[UIImageView alloc] initWithImage:stretchableImage];
stretchedImageView.frame = CGRectMake(100,100,70,50); // The image view is 70px wide

在应用程序中,stretchedImageView将如下所示:

在此处输入图像描述

还有另一种方法resizableImageWithCapInsets:resizingMode:可以让你平铺图像切片而不是拉伸它,所以你可以做一些疯狂的事情,比如拍摄这张图片:

在此处输入图像描述

并像这样水平平铺它:

在此处输入图像描述

于 2013-10-17T15:02:12.357 回答
1

如果我正确理解了这个问题,你应该使用:

(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets

UIEdgeInsets 是为每个 cap inset 指定浮点值的结构:图像的顶部、左侧、底部和右侧区域。要将其应用于按钮的图像,我们需要做的就是:

UIImage *buttonImage = [[UIImage imageNamed:@"blueButton"]  
   resizableImageWithCapInsets:UIEdgeInsetsMake(0, 16, 0, 16)];

这要求在拉伸图像以适应上面定义的按钮大小框架时,原始图像的左右 16 个像素不进行缩放或调整大小。结束

OBS:这仅适用于普通图像,例如带有渐变的图像将无法正常工作。

这里查看更多详细信息。

于 2013-10-17T14:44:02.067 回答
0

只需像这样在 UIImageView 中重复一个图像:

var dottedLineView : UIImageView = {
    let view = UIImageView()
    view.contentMode = .scaleAspectFill
    view.clipsToBounds = true
    view.backgroundColor = UIColor(patternImage: #imageLiteral(resourceName: "dashedLine"))

    return view
}()
于 2017-11-09T09:15:35.587 回答