平铺背景图像:我能做到这一点很容易地的UIImageView?(Tiled Background I

2019-06-25 21:43发布

我有一个平铺的全屏幕背景图像,即它必须是为了使一个大的水平和垂直转载几次。 就像在丑陋的主页浏览器;)

是的UIImageView我的朋友呢?

Answer 1:

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

如果你必须使用UIImageView ,你可以做你的图像视图将在平铺图像的前面画放置相同,但无论图像。



Answer 2:

要获取阿尔法与图形图象工作,请确保您有以下设置:

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


Answer 3:

多年来,我用比尔Dudney的做法,但iOS 6中有一个更好的解决方案。 而且......今天我发现了一个方法,使老版本的iOS的这一工作了。

  1. 创建新类“的UIImage +平铺”(复制/粘贴下面源)
  2. 在你想与平铺图像一个UIImageView任何类导入此。 这是一个类别,因此“升级”所有的UIImage的成平铺的,使用标准的苹果电话
  3. 当你想要一个图像的“平铺”的版本,称:“形象= [图像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


Answer 4:

我使用的@里维拉的解决方案的变化:

放入一个UIView扩展以下内容:

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

然后,你可以设置在情节提要/厦门国际银行文件中的背景图案:



Answer 5:

当我真的很喜欢Interface Builder中我创造了这个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文件时。



Answer 6:

在WWDC 2018视频会话219 -图像和图形的最佳做法 ,苹果电脑的工程师明确建议不要使用图案颜色为平铺背景:

我建议不要使用图案颜色与UIView的背景颜色属性。 相反,创建一个UIImageView。 将您的图像到图像视图。 并使用上的UIImageView的功能,适当地设置您的瓦片参数。

因此,要创建一个平铺的背景最好和最简单的方法是这样的:

imageView.image = image.resizableImage(withCapInsets: .zero, resizingMode: .tile)

或者更简单,如果你使用的资产类别-选择图形图象资产,在属性检查器中,使切片 (水平/垂直或两者),设置插图为零,宽度/高度到图像的尺寸:

后来干脆这个图像分配给您的图像视图(Interface Builder的作品,太),只是不要忘了给的UIImageView的设置contentMode.scaleToFill



Answer 7:

斯威夫特版本的丹尼尔·T的解决方案。 你仍然需要设置在IB的的keyPath值。 当然,你可能会更小心展开可选的UIImage。

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


文章来源: Tiled Background Image: Can I do that easily with UIImageView?