web-dev-qa-db-fra.com

Comment définir l'image d'arrière-plan d'une vue?

Je suis débutant chez Obj-C/Cocoa Touch/iPhone OS.

Je souhaite avoir un arrière-plan pour mon application avec des images différentes à chaque appel de la vue.

Disons que j'ai 10 images. Je l'ai utilisé comme ceci:

//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

Son bon fonctionnement

  • Supposons maintenant que j'ai des étiquettes de texte sur ma vue et que le texte ne s'affiche pas correctement en raison des couleurs de l'image. Comment puis-je le rendre un peu transparent? (Je suppose que dans Interface Builder, son alpha appelé.)
  • Disons que mon image n'est pas 320x480. Comment le configurer pour remplir la vue entière?

Comment puis-je le faire avec UIView/UIImageView?

J'ai trouvé initWithHue:saturation:brightness:alpha: dans la documentation mais cela ne fonctionne pas:

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

Veuillez aider!


Un ami a suggéré ........

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

.......... il a dit que c'était plus efficace car cela ne sauvegardait pas l'image dans le cache.

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

plus d'infos avec exemple de projet

82

Outre toutes les autres réponses ici, je ne pense vraiment pas que l'utilisation de backgroundColor de cette manière soit la bonne façon de faire les choses. Personnellement, je créerais une UIImageView et l'insérerais dans votre hiérarchie de vues. Vous pouvez soit l'insérer dans votre vue de dessus et le pousser complètement vers l'arrière avec sendSubviewToBack: ou vous pouvez faire de UIImageView la vue parent.

Je ne m'inquiéterais pas de choses comme l'efficacité de chaque implémentation à ce stade, car à moins que vous ne voyiez réellement un problème, cela n'a vraiment pas d'importance. Votre première priorité pour l'instant devrait être d'écrire du code que vous pouvez comprendre et qui peut facilement être modifié. La création d'une UIColor à utiliser comme image d'arrière-plan n'est pas la méthode la plus claire pour ce faire.

38
Dennis Munsie

utilisez ceci

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

manière simple:

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

C'est une très mauvaise idée d'afficher directement n'importe quel texte sur un fond irrégulier et en constante évolution. Peu importe ce que vous faites, le texte sera parfois difficile à lire.

La meilleure conception serait d'avoir les étiquettes sur un fond constant avec les images changeant derrière cela.

Vous pouvez définir la couleur d'arrière-plan des étiquettes du clair au blanc et régler l'alpha à 50,0 pour obtenir un bel effet translucide. Le seul problème est que l'arrière-plan de l'étiquette est un rectangle net.

Pour obtenir une étiquette avec un arrière-plan aux coins arrondis, vous pouvez utiliser un bouton avec une interaction utilisateur désactivée, mais l'utilisateur peut confondre cela avec un bouton.

La meilleure méthode serait de créer une image de l'arrière-plan de l'étiquette que vous souhaitez, puis de la placer dans une vue d'image et de placer l'étiquette avec l'arrière-plan transparent par défaut.

Les vues UIV simples n'ont pas de fond d'image. Au lieu de cela, vous devez faire un UIImageView votre vue principale, puis faire pivoter les images via sa propriété d'image. Si vous définissez le mode de UIImageView sur "Mettre à l'échelle pour s'adapter", il mettra à l'échelle n'importe quelle image pour s'adapter aux limites de la vue.

2
TechZen

Vous souhaitez que la couleur d'arrière-plan de votre vue principale soit semi-transparente? Il n'y a rien derrière ... donc rien ne se passera vraiment cependant:

Si vous souhaitez modifier l'alpha d'une vue, utilisez la propriété alpha:

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

Les vues elles-mêmes ont la transparence alpha, pas seulement UIColor.

Mais puisque votre problème est que vous ne pouvez pas lire le texte au-dessus des images ... soit:

  1. [DESIGN] Reconsidérez la conception/placement des images. Sont-ils nécessaires comme images de fond? Qu'en est-il du placement des étiquettes?
  2. [CODE] Ce n'est pas exactement la meilleure solution, mais ce que vous pourriez faire, c'est créer une UIView dont le cadre occupe toute la page et y ajouter une certaine transparence alpha. Cela créera une sorte de "superposition".
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
1
Malaxeur

Vous pouvez définir plusieurs images d'arrière-plan dans chaque vue en utilisant une méthode personnalisée comme ci-dessous.

faire plist pour chaque theam avec le nom de l'image d'arrière-plan et une autre couleur

#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

Peut l'utiliser via

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