4

我有一个可以在水平方向拉伸的图像,但需要垂直平铺(一个在另一个之上)以填充我的视图。我怎么能这样做?

我知道使用该-(UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets方法可以调整图像的大小。所以这对水平方向很有效,但该方法不能用于垂直方向,它确实需要平铺,而不是在垂直方向拉伸才能工作。

现在我对它如何工作的想法是运行一个循环,该循环使用水平拉伸的图像创建一个 UIImageView,并简单地调整 frame.origin.y 属性,然后将它作为每个循环的子视图添加,直到我超过高度的看法。然而,这似乎是一种过于复杂的方法,并且在需要调整视图大小时(例如在 iPad 旋转上)确实不实用

在 iOS 6.x 上是否有更简单、更有效的方法?

4

4 回答 4

3

我用它在 UIImageView 中水平平铺图像:

UIImage *image = [UIImage imageNamed:@"my_image"];
UIImage *tiledImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeTile];
UIImageView *imageView = [[UIImageView alloc] initWithImage:tiledImage];

这假设您将 UIImageView 的框架设置为比您的图像资产更大的尺寸。如果高度高于您的图像,它也会垂直平铺。

于 2015-04-21T16:23:36.473 回答
1

您是否考虑过使用UIColor的方法colorWithPatternImage:来创建重复图案并仅传递具有正确水平宽度的图像?

代码示例:

 // On your desired View Controller

 - (void)viewDidLoad
 { 
      [super viewDidLoad];
      UIImage *patternImage = [UIImage imageNamed:@"repeating_pattern"];
      self.view.backgroundColor = [UIColor colorWithPatternImage:patternImage];

      // ... do your other stuff here...
 }
于 2013-03-22T22:02:21.990 回答
1
UIImage *image = [UIImage imageNamed:@"test.png"];
UIImage *resizableImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width / 2, 0, image.size.width / 2)];
于 2013-03-23T00:41:25.610 回答
0

所以我想出了一个解决方案。我觉得有点笨拙,但它确实有效。

基本上我所做的是创建我的可拉伸图像,并指定了左右大写。然后我用它初始化一个 UIImageView 。然后我将图像视图的框架调整到所需的宽度。这将适当地调整其中包含的图像的大小。

最后我使用了一段我发现的代码,它通过垂直平铺现在包含在图像视图中的调整后的图像来创建一个新图像。请注意,我如何使用 UIImageView 视图的 image 属性而不是访问原始 UIImage。

最后一件事是将新的 UIImage 设置为视图的图案背景颜色

这是代码:

// create a strechable image
        UIImage *image = [[UIImage imageNamed:@"progressBackgroundTop@2x.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 60, 0, 60)];

        // create the image view that will contain it
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        CGRect frame = imageView.frame;
        frame.size.width = self.view.bounds.size.width;
        imageView.frame = frame;

        // create the tiled image
        CGSize imageViewSize = imageView.bounds.size;
        UIGraphicsBeginImageContext(imageViewSize);
        CGContextRef imageContext = UIGraphicsGetCurrentContext();
        CGContextDrawTiledImage(imageContext, (CGRect){ CGPointZero, imageViewSize }, imageView.image.CGImage);
        UIImage *finishedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        self.view.backgroundColor = [UIColor colorWithPatternImage:finishedImage];
于 2013-03-22T22:47:29.037 回答