webentwicklung-frage-antwort-db.com.de

Wie stelle ich das Hintergrundbild einer Ansicht ein?

Ich bin Anfänger bei Obj-C/Cocoa Touch/iPhone OS.

Ich möchte bei jedem Aufruf der Ansicht einen Hintergrund für meine App mit verschiedenen Bildern haben.

Angenommen, ich habe 10 Bilder. Ich habe es so benutzt:

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

Es funktioniert gut

  • Angenommen, ich habe Textbeschriftungen in meiner Ansicht und der Text wird aufgrund der Bildfarben nicht richtig angezeigt. Wie kann ich es ein wenig transparent machen? (Ich denke, in Interface Builder heißt es Alpha.)
  • Angenommen, mein Bild ist nicht 320x480. Wie stelle ich es so ein, dass es die gesamte Ansicht ausfüllt?

Wie kann ich das mit UIView/UIImageView machen?

Ich fand initWithHue:saturation:brightness:alpha: in der Dokumentation, aber es funktioniert nicht:

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

Bitte um Hilfe!


Ein Freund schlug vor ........

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

.......... er sagte, dass es effizienter ist, weil es das Bild nicht im Cache speichert.

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

mehr Info mit Beispielprojekt

82

Abgesehen von all den anderen Antworten hier denke ich wirklich nicht, dass die Verwendung von backgroundColor auf diese Weise die richtige Art ist, Dinge zu tun. Persönlich würde ich eine UIImageView erstellen und in Ihre Ansichtshierarchie einfügen. Sie können es entweder in Ihre Draufsicht einfügen und mit sendSubviewToBack ganz nach hinten schieben: oder Sie können die UIImageView zur übergeordneten Ansicht machen.

Ich würde mir keine Gedanken darüber machen, wie effizient jede Implementierung zu diesem Zeitpunkt ist, denn es spielt keine Rolle, es sei denn, Sie sehen tatsächlich ein Problem. Ihre erste Priorität sollte es sein, Code zu schreiben, den Sie verstehen und leicht ändern können. Das Erstellen einer UIColor als Hintergrundbild ist nicht die klarste Methode, um dies zu tun.

38
Dennis Munsie

benutze das

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

einfacher Weg :

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

Es ist eine sehr schlechte Idee, Text auf einem unregelmäßigen und sich ständig ändernden Hintergrund direkt anzuzeigen. Unabhängig davon, was Sie tun, ist der Text manchmal schwer zu lesen.

Das beste Design wäre, die Etiketten auf einem konstanten Hintergrund zu haben, wobei sich die Bilder dahinter ändern.

Sie können die Hintergrundfarbe der Beschriftung von klar auf weiß und von alpha auf 50,0 einstellen, um einen schönen durchscheinenden Effekt zu erzielen. Das einzige Problem ist, dass der Hintergrund des Etiketts ein starkes Rechteck ist.

Um eine Beschriftung mit einem Hintergrund mit abgerundeten Ecken zu erhalten, können Sie eine Schaltfläche mit deaktivierter Benutzerinteraktion verwenden, die der Benutzer jedoch möglicherweise für eine Schaltfläche hält.

Die beste Methode wäre, ein Bild des gewünschten Etikettenhintergrunds zu erstellen, dieses dann in eine Bildansicht zu platzieren und das Etikett mit dem standardmäßig transparenten Hintergrund darauf zu platzieren.

Einfache UIViews haben keinen Bildhintergrund. Stattdessen sollten Sie eine UIImageView als Hauptansicht festlegen und die Bilder dann über die image -Eigenschaft drehen. Wenn Sie den UIImageView-Modus auf "Anpassen" setzen, wird jedes Bild an die Grenzen der Ansicht angepasst.

2
TechZen

Sie möchten, dass die Hintergrundfarbe Ihrer Hauptansicht halbtransparent ist? Dahinter steckt nichts ... also passiert eigentlich nichts:

Wenn Sie das Alpha einer Ansicht ändern möchten, verwenden Sie die Eigenschaft alpha:

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

Ansichten selbst haben die Alpha-Transparenz, nicht nur UIColor.

Aber da Ihr Problem darin besteht, dass Sie keinen Text über den Bildern lesen können ... entweder:

  1. [DESIGN] Überdenken Sie das Design/die Platzierung der Bilder. Sind sie als Hintergrundbilder notwendig? Was ist mit der Platzierung der Etiketten?
  2. [CODE] Es ist nicht gerade die beste Lösung, aber Sie können eine UIView erstellen, deren Rahmen die gesamte Seite einnimmt und der Alpha-Transparenz hinzufügt. Dies erzeugt eine Art "Überlagerung".
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

Sie können in jeder Ansicht mehrere Hintergrundbilder festlegen, indem Sie die unten angegebene benutzerdefinierte Methode verwenden.

erstelle eine Liste für jeden Theam mit dem Namen des Hintergrundbildes und einer anderen Farbe

#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

Kann dies über verwenden

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