平铺的背景图像:我可以用UIImageView轻松实现吗?

我有一个全屏的背景图像,即为了制作一个大的图像,它必须被水平和垂直地重复几次。 就像在丑陋主页上的浏览器一样;)

UIImageView是我的朋友吗?

如果我正确理解你的问题,你可以使用colorWithPatternImage:UIColor然后在UIView上设置背景颜色。

如果你必须使用UIImageView你可以做同样的事情,但是你放置在图像视图中的任何图像都将在平铺图像前面绘制。

要使alpha与模式图像一起工作,请确保您有以下设置:

 view.backgroundColor = [UIColor colorWithPatternImage:aImage]; view.layer.opaque = NO; 

多年来,我用Bill Dudney的方法,但iOS 6有一个更好的解决scheme。 而且,今天我发现了一种在老版本的iOS上工作的方法。

  1. 创build新类“UIImage + Tileable”(下面的复制/粘贴源)
  2. 导入这个任何类,你想要一个UIImageView与图像的图像。 这是一个类别,所以它使用标准的Apple调用将所有UIImage“升级”为可变的UIImage
  3. 当你想要一个图像的“平铺”版本,请调用:“image = [image imageResizingModeTile]”

的UIImage + Tileable.h

 #import <UIKit/UIKit.h> @interface UIImage (Tileable) -(UIImage*) imageResizingModeTile; @end 

的UIImage + Tileable.m

 #import "UIImage+Tileable.h" @implementation UIImage (Tileable) -(UIImage*) imageResizingModeTile { float iOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; if( iOSVersion >= 6.0f ) { return [self resizableImageWithCapInsets:UIEdgeInsetsZero resizingMode:UIImageResizingModeTile]; } else { return [self resizableImageWithCapInsets:UIEdgeInsetsZero]; } } @end 

我使用@Rivera解决scheme的变体:

将以下内容放在UIView扩展中:

 - (void)setColorPattern:(NSString *)imageName { [self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:imageName]]]; } 

然后你可以在storyboard / xib文件中设置背景图案: 显示如何在故事板/ xib中设置colorPattern的图像

正如我真的很喜欢Interface Builder,我创build了这个UIImageView子类来应用平铺背景:

 @interface PETiledImageView : UIImageView @end @implementation PETiledImageView - (void)awakeFromNib { [super awakeFromNib]; UIImage * imageToTile = self.image; self.image = nil; UIColor * tiledColor = [UIColor colorWithPatternImage:imageToTile]; self.backgroundColor = tiledColor; } @end 

我尝试覆盖setImage:但似乎IB解码一个Nib文件时不会调用它。

丹尼尔T的解决scheme的迅捷版本。 您仍然需要在IB中设置keyPath值。 当然你可以更小心地解开可选的UIImage。

 extension UIView { var colorPattern:String { get { return "" // Not useful here. } set { self.backgroundColor = UIColor(patternImage: UIImage(named:newValue)!) } } }