2010-01-30 20 views
24

Soy un principiante en Obj-C/Cocoa Touch/iPhone OS.Cómo establecer la imagen de fondo de una vista?

Deseo tener un fondo para mi aplicación con diferentes imágenes cada vez que se llame a la vista.

Di que tengo 10 imágenes. He usado de esta manera:

//random image generation 
NSString* imageName; 
int aRandomNumber = arc4random() % 10; 
imageName =[NSString stringWithFormat:@"g%d.jpg",aRandomNumber]; 
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imageName]]]; 
NSLog(@"aRandomNumber is %d", aRandomNumber); 
//random image is generated 

Su funcionamiento muy bien

  • Ahora, decir que tengo las etiquetas de texto en mi punto de vista y el texto no se muestra correctamente debido a colores de la imagen. ¿Cómo puedo hacer que sea un poco transparente? (Supongo que en Interface Builder se llama alfa.)
  • Digamos que mi imagen no es 320x480. ¿Cómo lo configuro para llenar toda la vista?

¿Cómo puedo hacerlo con UIView/UIImageView?

He encontrado initWithHue:saturation:brightness:alpha: en la documentación, pero que no está funcionando:

self.view.backgroundColor = [[UIColor alloc] initWithHue:0.0 saturation:1.0 brightness:1.0 alpha:1.0]; 

Por favor, ayuda!


Un amigo le sugirió ........

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imageName]]]; 

.......... le han dicho que es más eficiente, ya que no guarda la imagen en el cache.

+0

Un amigo le sugirió ..... ... self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageWithContentsOfFile: [[[NSBundle main Bundle] resourcePath] stringByAppendingPathComponent: imageName]]]; .......... dijo que es más eficiente porque no guarda la imagen en el caché. – Daniel

Respuesta

1

¿Desea que el color de fondo de su vista principal sea semitransparente? No hay nada detrás de él ... así que nada va a ocurrir realmente sin embargo:

Si desea modificar el alfa de cualquier punto de vista, utilizar la propiedad alpha:

UIView *someView = [[UIView alloc] init]; 
... 
someView.alpha = 0.8f; //Sets the opacity to 80% 
... 

Vistas mismos tienen la transparencia alfa, no sólo UIColor.

Pero ya que su problema es que no se puede leer el texto en la parte superior de las imágenes ... o bien:

  1. [DISEÑO] reconsiderar el diseño/colocación de las imágenes. ¿Son necesarios como imágenes de fondo? ¿Qué pasa con la ubicación de las etiquetas?
  2. [CÓDIGO] No es exactamente la mejor solución, pero lo que podría hacer es crear una UIView cuyo marco ocupe toda la página y añada algo de transparencia alfa. Esto creará una "superposición" de géneros.
UIView *overlay = [[[UIView alloc] init] autorelease]; 
overlay.frame = self.view.bounds; 
overlay.alpha = 0.2f; 
[self.view addSubview:overlay]; 
... Add the rest of the views 
2

Es una muy mala idea para visualizar directamente cualquier texto sobre un fondo irregular y siempre cambiante. No importa lo que haga, algunas veces el texto será difícil de leer.

El mejor diseño sería tener las etiquetas en un fondo constante con las imágenes cambiando detrás de eso.

Puede establecer el color de fondo de las etiquetas de claro a blanco y establecer el alfa de 50.0 se obtiene un bonito efecto translúcido. El único problema es que el fondo de la etiqueta es un rectángulo crudo.

Para obtener una etiqueta con un fondo con esquinas redondeadas, puede utilizar un botón con la interacción del usuario desactivada, pero el usuario podría confundirlo con un botón.

El mejor método sería crear una imagen del fondo de la etiqueta que desea y luego colocarla en una vista de imagen y colocar la etiqueta con el fondo transparente predeterminado en ella.

UIViews lisos no tienen un fondo de imagen. En su lugar, debe hacer un UIImageVer su vista principal y luego girar las imágenes a través de su propiedad de imagen. Si configura el modo UIImageView en "Ajustar a escala", escalará cualquier imagen para que se ajuste a los límites de la vista.

37

Además de todas las otras respuestas aquí, realmente no creo que el uso de backgroundColor de esta manera sea la manera correcta de hacer las cosas. Personalmente, crearía un UIImageView e insertarlo en su jerarquía de vistas. Puede insertarlo en su vista superior y presionarlo hasta la parte posterior con sendSubviewToBack: o puede hacer que el UIImageView sea la vista primaria.

No me preocuparía la eficacia de cada implementación en este punto, porque a menos que realmente vea un problema, realmente no importa. Su primera prioridad por el momento debería ser escribir un código que pueda comprender y pueda cambiarse fácilmente. Crear un UIColor para usar como imagen de fondo no es el método más claro para hacer esto.

6

manera simple:

-(void) viewDidLoad { 
    self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage  imageNamed:@"background.png"]]; 
    [super viewDidLoad]; 
    } 
80
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]]; 

more info con el ejemplo del proyecto

+0

si uso este código obtengo pérdida de memoria cómo solucionarlo – codercat

+0

Votado por Buena respuesta hermano – user3182143

1

Es posible ajustar la imagen de fondo múltiple en todas las vistas utilizando método personalizado de la siguiente manera.

make plist para cada theam con nombre de la imagen de fondo y el otro color

#import <Foundation/Foundation.h> 
@interface ThemeManager : NSObject 
@property (nonatomic,strong) NSDictionary*styles; 
+ (ThemeManager *)sharedManager; 
-(void)selectTheme; 
@end 

      #import "ThemeManager.h" 

      @implementation ThemeManager 
      @synthesize styles; 
      + (ThemeManager *)sharedManager 
      { 
       static ThemeManager *sharedManager = nil; 
       if (sharedManager == nil) 
       { 
        sharedManager = [[ThemeManager alloc] init]; 
       } 
       [sharedManager selectTheme]; 
       return sharedManager; 
      } 
      - (id)init 
      { 
       if ((self = [super init])) 
       { 

       } 
       return self; 
      } 
      -(void)selectTheme{ 
       NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
       NSString *themeName = [defaults objectForKey:@"AppTheme"] ?: @"DefaultTheam"; 

       NSString *path = [[NSBundle mainBundle] pathForResource:themeName ofType:@"plist"]; 
       self.styles = [NSDictionary dictionaryWithContentsOfFile:path]; 
      } 
      @end 

puede utilizar esta vía

NSDictionary *styles = [ThemeManager sharedManager].styles; 
NSString *imageName = [styles objectForKey:@"backgroundImage"]; 
[imgViewBackGround setImage:[UIImage imageNamed:imageName]]; 
21

uso de este

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Default"]]; 
+1

me salvó, funciona genial –

Cuestiones relacionadas