簡體   English   中英

如何設置視圖的背景圖像?

[英]How to set background image of a view?

我是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]]];

..........他告訴我,這樣做更有效,因為它不會將圖像保存在緩存中。

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

示例項目的更多信息

除了這里的所有其他響應之外,我真的不認為以這種方式使用backgroundColor是執行操作的正確方法。 就個人而言,我將創建一個UIImageView並將其插入到您的視圖層次結構中。 您可以將其插入到頂視圖中,然后使用sendSubviewToBack:將其一直推到背面:或者可以將UIImageView設置為父視圖。

我現在不必擔心每個實現的效率如何,因為除非您實際看到一個問題,否則它實際上並不重要。 現在,您的首要任務應該是編寫可以理解並且可以輕松更改的代碼。 創建UIColor用作背景圖像並不是最清晰的方法。

用這個

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

簡單方法:

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

直接在不規則且不斷變化的背景上直接顯示任何文本是一個非常糟糕的主意。 無論您做什么,有時文本都很難閱讀。

最好的設計是將標簽放置在恆定的背景上,並在其后更改圖像。

您可以將標簽的背景顏色從透明設置為白色,將Alpha的背景顏色設置為50.0,可以獲得很好的半透明效果。 唯一的問題是標簽的背景是一個鮮明的矩形。

要獲得帶有圓角背景的標簽,可以使用禁用了用戶交互的按鈕,但用戶可能會誤認為該按鈕。

最好的方法是創建所需標簽背景的圖像,然后將其放置在imageview中,然后將具有默認透明背景的標簽放置在該圖像視圖上。

純UIViews沒有圖像背景。 相反,您應該使UIImageView成為主視圖,然后通過其image屬性旋轉圖像。 如果將UIImageView的模式設置為“縮放以適合”,它將縮放任何圖像以適合視圖的邊界。

您可以使用以下自定義方法在每個視圖中設置多個背景圖像。

使用背景圖片名稱和其他顏色為每個主題創建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]];

您希望主視圖的背景色是半透明的嗎? 它背后沒有任何東西...所以什么也不會真正發生:

如果要修改任何視圖的Alpha,請使用alpha屬性:

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

視圖本身具有Alpha透明度,而不僅僅是UIColor。

但是由於您的問題是您無法在圖像上方閱讀文字...或者:

  1. [設計]重新考慮圖像的設計/位置。 它們是否有必要作為背景圖像? 標簽的位置如何?
  2. [CODE]這並不是最好的解決方案,但是您可以做的是創建一個UIView,其框架占據整個頁面並為其添加一些alpha透明度。 這將創建各種“疊加”。
 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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM