iphone - pantalla - Cómo establecer la imagen de fondo de una vista?
fondos de pantalla para iphone (7)
Soy un principiante en Obj-C / Cocoa Touch / iPhone OS.
Deseo tener un fondo para mi aplicación con diferentes imágenes cada vez que se llame a la vista.
Digamos que tengo 10 imágenes. Lo he usado así:
//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
Funciona bien
- Ahora, supongamos que tengo etiquetas de texto en mi vista y el texto no se muestra correctamente debido a los colores de la imagen. ¿Cómo puedo hacer que sea un poco transparente? (Supongo que en Interface Builder se llama alpha)
- Digamos que mi imagen no es 320x480. ¿Cómo lo configuro para llenar toda la vista?
¿Cómo puedo hacerlo con UIView / UIImageView?
Encontré initWithHue:saturation:brightness:alpha:
en la documentación, pero no funciona:
self.view.backgroundColor = [[UIColor alloc] initWithHue:0.0 saturation:1.0 brightness:1.0 alpha:1.0];
¡Por favor ayuda!
Un amigo sugirió ........
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:imageName]]];
.......... dijo que es más eficiente porque no guarda la imagen en el caché.
¿Desea que el color de fondo de su vista principal sea semitransparente? No hay nada detrás ... así que nada sucederá sin embargo:
Si desea modificar el alfa de cualquier vista, use la propiedad alpha:
UIView *someView = [[UIView alloc] init];
...
someView.alpha = 0.8f; //Sets the opacity to 80%
...
Las vistas tienen la transparencia alfa, no solo UIColor.
Pero dado que su problema es que no puede leer el texto en la parte superior de las imágenes ... tampoco:
- [DISEÑO] Reconsidere el diseño / ubicación de las imágenes. ¿Son necesarios como imágenes de fondo? ¿Qué pasa con la ubicación de las etiquetas?
- [CÓDIGO] No es exactamente la mejor solución, pero lo que podrías hacer es crear un 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
Además de todas las otras respuestas aquí, realmente no creo que el uso de backgroundColor de esta manera sea la forma 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 momento, porque a menos que realmente veas 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.
Es una muy mala idea mostrar directamente cualquier texto en 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 efecto translúcido agradable. 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 usar un botón con la interacción del usuario desactivada, pero el usuario puede confundirlo con un botón.
El mejor método sería crear una imagen del fondo de la etiqueta que desee y luego colocarla en una vista de imagen y colocar la etiqueta con el fondo transparente predeterminado sobre eso.
Los UIViews simples 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.
Puede establecer múltiples imágenes de fondo en cada vista usando el método personalizado como se muestra a continuación.
hacer plist para cada theam con el nombre de la imagen de fondo y 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 usar esto vía
NSDictionary *styles = [ThemeManager sharedManager].styles;
NSString *imageName = [styles objectForKey:@"backgroundImage"];
[imgViewBackGround setImage:[UIImage imageNamed:imageName]];
manera simple :
-(void) viewDidLoad {
self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"background.png"]];
[super viewDidLoad];
}
utilizar esta
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Default"]];
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]];
más información con el proyecto de ejemplo