web-dev-qa-db-ja.com

ビューの背景画像を設定する方法は?

私は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]]];

..........キャッシュに画像を保存しないため、より効率的だと彼は言いました。

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

詳細 サンプルプロジェクト

82

ここにある他のすべての応答に加えて、このようにbackgroundColorを使用することが物事を行う適切な方法であるとは本当に思いません。個人的には、UIImageViewを作成し、ビュー階層に挿入します。トップビューに挿入してsendSubviewToBack:で最後までプッシュするか、UIImageViewを親ビューにすることができます。

この時点で各実装がどれほど効率的であるかなどは心配しません。実際に問題が発生しない限り、それは実際には問題ではないからです。現時点での最優先事項は、理解でき、簡単に変更できるコードを書くことです。背景画像として使用するUIColorを作成することは、これを行う最も明確な方法ではありません。

38
Dennis Munsie

これを使って

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

簡単な方法:

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

不規則で変化し続ける背景にテキストを直接表示することは非常に悪い考えです。何をするにしても、テキストが読みにくい場合があります。

最適なデザインは、一定の背景にラベルを付け、その背後で画像を変更することです。

ラベルの背景色をクリアからホワイトに設定し、アルファを50.0に設定すると、素敵な半透明の効果が得られます。唯一の問題は、ラベルの背景が完全な長方形であることです。

角が丸い背景付きのラベルを取得するには、ユーザー操作を無効にしたボタンを使用できますが、ユーザーはそれをボタンと間違える可能性があります。

最適な方法は、目的のラベル背景の画像を作成し、それを画像ビューに配置し、その上にデフォルトの透明な背景を持つラベルを配置することです。

プレーンUIViewには画像の背景がありません。代わりに、UIImageViewをメインビューにして、そのimageプロパティを使用して画像を回転する必要があります。 UIImageViewのモードを「Scale to fit」に設定すると、ビューの境界に合うように画像がスケーリングされます。

2
TechZen

メインビューの背景色を半透明にしたいですか?その背後には何もありません...しかし、実際には何も起こりません:

ビューのアルファを変更する場合は、alphaプロパティを使用します。

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

ビュー自体には、UIColorだけでなく、アルファ透明度があります。

しかし、あなたの問題は、画像の上にあるテキストを読むことができないということです...

  1. [デザイン]画像のデザイン/配置を再検討します。背景画像として必要ですか?ラベルの配置はどうですか?
  2. [コード]これは最適なソリューションではありませんが、フレーム全体がページ全体を占めるU​​IViewを作成し、それにアルファ透明度を追加することができます。これにより、一種の「オーバーレイ」が作成されます。
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

以下のカスタムメソッドを使用して、すべてのビューに複数の背景画像を設定できます。

背景画像名と他の色ですべてのテーマの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]];
1
sinh99