objective animatedimage iphone uiimageview

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.

  1. crea la nueva clase "UIImage + Tileable" (copiar / pegar fuente a continuación)
  2. 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
  3. 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.