Как установить фоновое изображение вида?

Я новичок в Obj-C / Cocoa Touch / iPhone OS.

Я хочу, чтобы у моего приложения был фон с разными изображениями каждый раз, когда вызывается представление.

Скажем, у меня есть 10 изображений. Я использовал это так:

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

Работает нормально

  • Теперь предположим, что у меня есть текстовые метки на моем представлении, и текст отображается неправильно из-за цветов изображения. Как сделать его немного прозрачным? (Я думаю, что в Interface Builder это называется альфа.)
  • Скажем, мое изображение не 320x480. Как мне настроить его так, чтобы он заполнял весь вид?

Как я могу это сделать с помощью UIView / UIImageView?

Я нашел initWithHue:saturation:brightness:alpha: в документации, но он не работает:

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

Пожалуйста помоги!


Друг предложил ........

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

.......... он сказал, что это более эффективно, потому что оно не сохраняет изображение в кеше.


person Daniel    schedule 30.01.2010    source источник
comment
Друг предложил ........ self.view.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageWithContentsOfFile: [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: imageName]]]; .......... он сказал, что это более эффективно, потому что оно не сохраняет изображение в кеше.   -  person Daniel    schedule 30.01.2010


Ответы (7)


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

дополнительная информация с примером проекта

person Gurumoorthy Arumugam    schedule 08.05.2012
comment
если я использую этот код, я получаю утечку памяти, как это исправить - person codercat; 05.02.2014

Помимо всех других ответов здесь, я действительно не думаю, что использование backgroundColor таким образом является правильным способом делать что-то. Лично я бы создал UIImageView и вставил его в вашу иерархию представлений. Вы можете либо вставить его в свой вид сверху и полностью отодвинуть назад с помощью sendSubviewToBack:, либо вы можете сделать UIImageView родительским представлением.

Я бы не стал беспокоиться о таких вещах, как эффективность каждой реализации на данном этапе, потому что, если вы действительно не видите проблемы, это действительно не имеет значения. На данный момент вашим первым приоритетом должно быть написание кода, который вы можете понять и который можно легко изменить. Создание UIColor для использования в качестве фонового изображения - не самый простой способ сделать это.

person Dennis Munsie    schedule 06.03.2010

использовать это

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

простой способ :

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

Непосредственно отображать любой текст на нерегулярном и постоянно меняющемся фоне - очень плохая идея. Что бы вы ни делали, иногда текст будет трудно читать.

Лучшим дизайном было бы, чтобы надписи были на постоянном фоне, а изображения за ним менялись.

Вы можете установить цвет фона меток от прозрачного до белого и установить значение от альфа до 50.0, и вы получите красивый полупрозрачный эффект. Проблема только в том, что фон этикетки представляет собой строгий прямоугольник.

Чтобы получить этикетку с фоном со скругленными углами, вы можете использовать кнопку с отключенным взаимодействием с пользователем, но пользователь может принять это за кнопку.

Лучшим методом было бы создать изображение фона метки, которое вы хотите, а затем поместить его в изображение и поместить на него метку с прозрачным фоном по умолчанию.

Обычные UIViews не имеют фона изображения. Вместо этого вы должны сделать UIImageView своим основным представлением, а затем повернуть изображения с помощью его свойства image. Если вы установите режим UIImageView на «Масштабировать по размеру», он будет масштабировать любое изображение, чтобы оно соответствовало границам представления.

person TechZen    schedule 30.01.2010

Вы хотите, чтобы цвет фона вашего основного представления был полупрозрачным? За этим ничего нет ... так что на самом деле ничего не произойдет:

Если вы хотите изменить альфа-канал любого представления, используйте свойство alpha:

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

Сами представления имеют альфа-прозрачность, а не только UIColor.

Но поскольку ваша проблема в том, что вы не можете читать текст поверх изображений ... либо:

  1. [ДИЗАЙН] Пересмотрите дизайн / размещение изображений. Нужны ли они в качестве фоновых изображений? А как насчет размещения этикеток?
  2. [КОД] Это не совсем лучшее решение, но вы могли бы создать UIView, фрейм которого занимает всю страницу, и добавить к нему некоторую альфа-прозрачность. Это создаст своего рода «наложение».
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
person Malaxeur    schedule 30.01.2010

Вы можете установить несколько фоновых изображений в каждом представлении, используя собственный метод, как показано ниже.

сделать список для каждой группы с именем фонового изображения и другим цветом

#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

Можно использовать через

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