iphone - animatedimage - objective c uiimage
Imagen de fondo en mosaico: ¿Puedo hacerlo fácilmente con UIImageView? (6)
Tengo una imagen de fondo en pantalla completa que está en mosaico, es decir, tiene que reproducirse varias veces horizontal y verticalmente para hacer una grande. Al igual que en los navegadores en páginas de inicio feas;)
¿UIImageView es mi amigo para esto?
Como realmente me gusta Interface Builder, creé esta subclase UIImageView
para aplicar fondos alicatados:
@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
Traté de sobreescribir setImage:
pero parece que IB no lo llama cuando decodifica un archivo Nib.
Durante años usé el enfoque de Bill Dudney, pero iOS 6 tiene una solución mucho mejor. Y ... hoy encontré una manera de hacer que esto funcione en las versiones anteriores de iOS también.
- crea la nueva clase "UIImage + Tileable" (copiar / pegar fuente a continuación)
- importe esto en cualquier clase donde desee un UIImageView con imagen enlosable. Es una categoría, por lo que "actualiza" todos los UIImage''s en mosaicos, usando llamadas estándar de Apple
- cuando desee una versión de "mosaico" de una imagen, llame a: "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
Para que Alfa funcione con la imagen de patrón, asegúrese de tener el siguiente conjunto:
view.backgroundColor = [UIColor colorWithPatternImage:aImage];
view.layer.opaque = NO;
Swift versión de la solución de Daniel T. Aún necesita establecer el valor de keyPath en IB. Por supuesto, podrías ser más cuidadoso desenvolviendo el UIImage opcional.
extension UIView {
var colorPattern:String {
get {
return "" // Not useful here.
}
set {
self.backgroundColor = UIColor(patternImage: UIImage(named:newValue)!)
}
}
}
Yo uso una variación de la solución de @ Rivera:
Coloque lo siguiente en una extensión UIView:
- (void)setColorPattern:(NSString *)imageName
{
[self setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:imageName]]];
}
Luego puede establecer el patrón de fondo en el archivo storyboard / xib:
Si entiendo su pregunta correctamente, puede usar colorWithPatternImage:
en UIColor
luego establecer el color de fondo en una UIView
.
Si debe usar un UIImageView
, puede hacer lo mismo, pero cualquier imagen que coloque en la vista de imagen dibujará delante de la imagen embaldosada.