Как установить фоновое изображение вида? - PullRequest
26 голосов
/ 30 января 2010

Я новичок в 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

Хорошо работает

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

Как я могу сделать это с 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]]];

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

Ответы [ 7 ]

81 голосов
/ 08 мая 2012
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imageName.png"]];

больше информации с примером проекта

38 голосов
/ 06 марта 2010

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

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

24 голосов
/ 28 ноября 2012

используйте это

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Default"]];
6 голосов
/ 01 апреля 2011

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

   -(void) viewDidLoad {
   self.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage       imageNamed:@"background.png"]];
    [super viewDidLoad];
    }
2 голосов
/ 30 января 2010

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

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

Вы можете установить цвет фона меток от прозрачного до белого и установить от альфа до 50,0, чтобы получить хороший эффект полупрозрачности. Единственная проблема заключается в том, что фон метки представляет собой четкий прямоугольник.

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

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

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

1 голос
/ 26 октября 2012

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

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

#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]];
1 голос
/ 30 января 2010

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

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

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

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

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

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