Подтвердить что ты не робот

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

Я новичок в 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 его называют alpha.)
  • Скажите, что мое изображение не 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]]];

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

4b9b3361

Ответ 1

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

подробнее с примером проекта

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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

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

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

Ответ 6

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

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

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

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

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

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

Ответ 7

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

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

#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]];