タイリングされたフルスクリーンの背景画像があります。つまり、大きな画像を作成するには、水平方向と垂直方向に数回再生する必要があります。いホームページのブラウザのように;)
UIImageViewは私の友人ですか?
あなたの質問を正しく理解していれば、colorWithPatternImage:
on UIColor
その後、UIView
に背景色を設定します。
UIImageView
を使用する必要がある場合も同じことができますが、画像ビューに配置する画像はタイル画像の前に描画されます。
アルファをパターン画像で動作させるには、次の設定があることを確認してください。
view.backgroundColor = [UIColor colorWithPatternImage:aImage];
view.layer.opaque = NO;
何年もの間、Bill Dudneyのアプローチを使用していましたが、iOS 6にははるかに優れたソリューションがあります。そして...今日、古いバージョンのiOSでもこの作業を行う方法を見つけました。
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のソリューションのバリエーションを使用します。
UIView拡張機能に次を追加します。
- (void)setColorPattern:(NSString *)imageName
{
[self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:imageName]]];
}
次に、storyboard/xibファイルで背景パターンを設定できます。
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ファイルをデコードするときに呼び出しません。
WWDC 2018ビデオセッション219-画像とグラフィックスのベストプラクティス 、Appleエンジニアは、タイルの背景にパターンの色を使用しないことを明示的に推奨しています。
UIViewの背景色プロパティでパターン化された色を使用しないことをお勧めします。代わりに、UIImageViewを作成します。画像をその画像ビューに割り当てます。 UIImageViewの関数を使用して、タイルパラメーターを適切に設定します。
したがって、タイル状の背景を作成する最良かつ最も簡単な方法は次のようになります。
imageView.image = image.resizableImage(withCapInsets: .zero, resizingMode: .tile)
または、アセットカタログを使用する場合はさらに簡単です。パターンイメージアセットを選択し、属性インスペクターでSlicing(Horizontal/Verticalまたはboth)を有効にします。インセットをゼロに設定し、幅/高さを画像の寸法に設定します。
次に、この画像を画像ビューに割り当てます(Interface Builderも機能します)。UIImageViewのcontentMode
を.scaleToFill
に設定することを忘れないでください。
ダニエルTのソリューションの迅速なバージョン。 IBでkeyPath値を設定する必要があります。もちろん、オプションのUIImageをより注意深くアンラップすることもできます。
extension UIView {
var colorPattern:String {
get {
return "" // Not useful here.
}
set {
self.backgroundColor = UIColor(patternImage: UIImage(named:newValue)!)
}
}
}