2011-02-06 8 views

Respuesta

88

Así es como se establece un fondo a una imagen:

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]]; 

Editar: para escribir lo que dijo Felixyz (y gracias a Manni), hacer esto en su delegado:

window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Background.png"]]; 

Y en cada vista que desea tener la imagen, haga esto:

self.view.backgroundColor = [UIColor clearColor]; 
+7

Terminé usando un UIImageView en el plumón de la ventana principal y UIColor clearColor en mis vistas. Tenga en cuenta que el uso del colorWithPatternImage tal como lo indicó anteriormente hizo que mi memoria utilice el salto de 1.7M a 9.5M cuando la aplicación se cargue por primera vez - colorWithPatternImage parece consumir una tonelada de memoria. – Slee

+1

Se recomienda preparar 3 archivos png para su aplicación Universal, dice Background.png, [email protected], Background ~ iPad.png, y establecer el fondo usando el siguiente código: self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @ "Fondo"]]; iOS seleccionará el archivo png correcto debido a la categoría de su dispositivo. Espero que esta ayuda. – ZYiOS

+0

Probé el enfoque anterior en una aplicación basada en 'UINavigation'. El problema con este enfoque es que establecer una imagen en window.background configura correctamente la imagen, pero hacer que la otra vista sea clara es incorrecta, ya que durante la visualización push o pop Al superponer, puede ver las vistas insertadas en la pila. Cualquier idea sobre cómo solucionarlo – Shekhu

8

Depende del tipo de interfaz que tenga. ¿Tabbed? ¿Basado en navegación? Pero la respuesta general es: agregue un UIImageView a su UIWindow antes/debajo de su vista principal. Luego haga que cada vista manejada por su controlador de vista principal tenga un fondo transparente. Es difícil dar consejos más específicos sin saber si usa IB o no, o cómo se ve su jerarquía de vistas.

+1

navegación basada, así como los controladores de vista se empujan y se metió el fondo permanece – Slee

+0

La combinación de sudo y sugerencias de Manni hace que sea fácil de lograr lo que necesita: establecer el backgroundColor en la ventana para ser una imagen (colorWithPatternImage :) y hacer que backgroundColor en el controlador de navegación y todos sus subcontroladores sean transparentes. Es posible que deba establecer opaque = NO en ellos también. Tenga en cuenta que esto podría afectar el rendimiento durante las animaciones, pero no debería ser un problema en los dispositivos más nuevos. – Felixyz

7

En mi aplicación, configuré un color de fondo predeterminado. Tal vez usted puede hacer esto con el fondo de la imagen:

1 .: Ajuste el color de fondo de su UIWindow en su AppDelegate:

window.backgroundColor = [UIColor myBackgroundGray]; // own Category 

2 .: Y ahora, hacer que todos los otros puntos de vista transparente:

self.view.backgroundColor = [UIColor clearColor]; // = transparent 
+1

Esto causa un error grave al presentar presentadores modales con animación. Puede ver los controles desde la vista modal y la vista existente y luego desaparece la vista existente. –

2

Su fondo es propiedad de cualquier objeto que hereda View. Las etiquetas, los botones, los controladores y la ventana de la aplicación, por ejemplo, tienen fondos. Si quieres que sea completamente un bg para toda la aplicación, debes subir la ruta en tus controladores para encontrar la vista "superior" (vista desde abajo) y establecer su fondo para que sea la imagen que deseas.

7

En su AppDelegate en

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

Añadir esta línea:

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]]; 

Después solo hay que fijar sus vistas fondos a [UIColor clearColor];

3

No estoy seguro de las implicaciones de rendimiento, pero necesitaba lograr algo similar, y terminé usando un UIImageView que funciona bien (en C#, pero funciona igual en obj-c):

//Add the view controller first, to ensure proper order of views later. 
Window.RootViewController = new UIViewController(); 

//create backdrop image view 
var imageView = new UIImageView(Window.Bounds); 
imageView.Image = UIImage.FromBundle("backdrop.jpg"); 

//insert into window. 
Window.InsertSubview(imageView, 0); 

Esto no controla los cambios de orientación, pero en mi caso, me permitió agregar efectos de movimiento al fondo (como el paralaje).

0

Normalmente utilizo esta función para evitar superposiciones con la barra de navegación en iphone.

-(void)setImageBackground:(NSString*)imageName{ 
    UINavigationController* navigationController = [self navigationController]; 
    float height = navigationController.toolbar.frame.size.height; 
    CGSize size = self.view.frame.size; 
    size.height = size.height; 
    UIGraphicsBeginImageContext(size); 
    CGRect bounds = self.view.bounds; 
    bounds.origin.y = bounds.origin.y + height; 
    bounds.size.height = bounds.size.height-height; 
    [[UIImage imageNamed:imageName] drawInRect:bounds]; 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    self.view.backgroundColor = [UIColor colorWithPatternImage:image]; 
} 
0

a llamar a esta assignbackground en viewDidLoad

override func viewDidLoad() { 
assignbackground() 
} 

func assignbackground(){ 
     let background = UIImage(named: "background") 

     var imageview : UIImageView! 
     imageview = UIImageView(frame: view.bounds) 
     imageview.contentMode = UIViewContentMode.ScaleAspectFill 
     imageview.clipsToBounds = true 
     imageview.image = background 
     imageview.center = view.center 
     view.addSubview(imageview) 
     self.view.sendSubviewToBack(imageview) 
    } 
Cuestiones relacionadas