• 締切済み

アプリ起動画面を画像からxibに変更する

私の質問を閲覧していただきありがとうございます。 早速以下にこちらの環境を書いていきたいと思います。不足している情報がありましたら適宜指摘してくださると幸いです。 Xcode5 simulator (iPhone Retina 4inch 64bit) iOS7 では早速本題に入っていきたいと思います。 本質問でみなさんにお尋ねしたい事は「スプラッシュ画面を動的に変更する手法」です。 本来スプラッシュ画面で表示されるのは画像になると思うのですが、その画像を、私が任意に変更できるxibへと変更したいのです。 ※変更の都度png作り直せばいいという類の回答は無しでお願い致します。 私が今回想定しているxibはデフォルトのself.view上に self.viewと同じサイズのimageViewを貼付け、 imageViewの上にUILabelを一つ貼付ける という構成になるのですが、このimageViewの背景画像とLabelのテキストをアプリ起動時ににappDelegateのdidFinishLaunchingWithOptions等で動的に変更し、変更したxibをスプラッシュ画面に表示したいです。 以上になります。 お時間有りましたらご助言いただけますと有り難いです。 追記 明けましておめでとうございます。 今年もどうぞ宜しくお願いいたします

  • crein
  • お礼率50% (2/4)

みんなの回答

回答No.1

didFinishLaunchingWithOptionsが呼ばれた時点で 既に起動画像は表示されているので、起動画像はシンプルなものにして、 didFinishLaunchingWithOptionsで初期表示したいviewを極力早くロードする しかないかと思います。 以下のURLが参考になると思います。 http://d.hatena.ne.jp/gamako/20090501/1241194317 http://blog.yabasoft.biz/archives/2982 http://www.yoheim.net/blog.php?q=20120603 あぁ、やったことないし、成功した報告を見たこともないですが、 もしかするとmain関数でUIApplicationMainを呼び出す前に default.pngファイルを入れ替えるコーディングを書けば 最初から起動画像を切り替えられるかもしれません。 (アプリ初期化前なので、もしかすると起動画像ファイルの存在位置を 特定するのが難しいかもしれません。) なお、十分御存知の上での質問なのかもしれませんが、 Appleのヒューマンインターフェースガイドラインとしては、 起動画像は質素でつまらないものを推奨しており、スプラッシュ画面など、 アプリケーション起動の「儀式」的な動作は避けるよう明記されている ことをお伝えしておきます。 (参考) https://developer.apple.com/jp/devcenter/ios/library/documentation/userexperience/conceptual/mobilehig/LaunchImages/LaunchImages.html そして、Appleの審査では、このヒューマンインターフェースガイドライン に従っているかどうかが審査項目の一つになっています。 とはいえ、実際にAppleの審査を通っているアプリでは、派手な起動画像も たくさん見られます。派手な起動画像であっても、それがアプリの機能の 一部としてユーザに好意的に見えるものであれば問題ないのだと思います。 アプリとあまり関係ない広告画面を表示するような場合は審査でリジェクト される可能性が高いと思います。

crein
質問者

お礼

Lchan0211bさん 早速の回答ありがとうございます。 参考にいくつかあげていただいたURLとてもありがたかったです。 >>もしかするとmain関数でUIApplicationMainを呼び出す前に default.pngファイルを入れ替えるコーディングを書けば 最初から起動画像を切り替えられるかもしれません。 これができればすぐに終わりそうなのでこっちでもいろいろ調べてみます。 解決手法がわかったらここでフィードバックしますね! また、起動画面のお話有り難かったです。 私の知らない様な情報もあったので、今後アプリを作っていく際の参考にしようかと思います。

関連するQ&A

  • Xcodeのラベル名とIBのラベル接続ができません

    Xcodeで、hogeViewController.h @interface hogeViewController : UIViewController { IBOutlet UILabel *myLabel; } @end を作成し、hogeViewController.xibをダブルクリックしてInterface Builderを開いて、 ViewにLabelを貼りつけ、 File's OwnerのOutletsからmyLabelをViewのLabelに接続したいのですが、 なぜかFile's OwnerのOutletsにmyLabelが表示されません。 昨日までは普通にできていたのですが、今日突然できなくなりました。 以前も同じようなことが起こり、その時は Xcodeの設定ファイル ~/Library/Preferences/com.apple.Xcode.plist を削除したら直ったのですが、 今回は設定ファイルを消しても直らないようです。 どうしたら良いのでしょうか?

  • スクロールの上にある画像をフリックで変える方法とは

    今、画像を左右に数枚スクロールさせ、かつ、その画像を上や下にフリックすると各々、上や下に他の画像がでてきて、さらに拡大縮小もできるようなコードを書いています。 ViewContorller(以下、VC)にスクロールのメソッドを書き、 もう一つのPageView(UIScrollVIewクラスを親にもつ。以下、PV)に画像が拡大縮小するようなメソッドと上下のフリックのメソッドを書いています。 このPVの中で行う上下のフリックの操作によって、VCにあるスクロールの上に乗っている画像を変えたいのですが、色々と試したのですがその方法が一向にわかりません。もし宜しければ、ご教授ください。宜しくお願い致します。 xcodeは5.0です。 以下、スクロールとその上に画像をのせているpageがあるVC.mのコードです。 このpageにのっている画像をPVのほうのフリック操作で変更させたいと思っています。 - (void)viewDidLoad { [super viewDidLoad]; UIScrollView *scrollView = [[UIScrollView alloc] init]; scrollView.frame = self.view.bounds; scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height); scrollView.pagingEnabled = YES; [self.view addSubview:scrollView]; //AppdelegateでValueというプロパティをつくり、PVでのフリック操作によってこの数値が変動したら、currentpageに反映して、それに対しての画像がでてくるようにしたいつもりです。 AppDelegate *appdelegate=(AppDelegate*)[[UIApplication sharedApplication]delegate]; currentpage=appdelegate.Value; //PageViewにて、画像をいれるメソッドをsetImageでつくっています。 for (int i=1;i<4;i++) { PageView *page = [[PageView alloc] initWithFrame:self.view.bounds]; [page setImage:[NSString stringWithFormat:@"%d.%d",currentpage,i]]; page.frame = CGRectMake( self.view.frame.size.width * (i-1), 0, self.view.frame.size.width, self.view.frame.size.height ); [scrollView addSubview:page]; }

  • Xcodeでの画面遷移について

    Xcode5.0でアプリを作成しています。 アプリがバックグラウンドから再びアクティブになるときに画面遷移の処理をするために 以下の方法にてAppDelegateのapplicationDidBecomeActiveからView Controllerに処理を渡しています。 AppDelegate.m - (void)applicationDidBecomeActive:(UIApplication *)application { [[NSNotificationCenter defaultCenter] postNotificationName:@"applicationDidBecomeActive" object:nil]; } ViewController.m { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:@"applicationDidBecomeActive" object:nil]; } - (void)applicationDidBecomeActive { ViewController *View = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondView"]; [self presentModalViewController:View animated:YES]; } ViewController.mの- (void)applicationDidBecomeActiveで画面遷移の処理をしたいのですが、ViewDidAppearでは出来る画面遷移がapplicationDidBecomeActiveでは実行されない状態です。 ググって調べたところ、読み込みのタイミングが問題らしいことはなんとなく解ったのですが、 どうにかして、- (void)applicationDidBecomeActiveと同じタイミング(アプリがアクティブになったとき)で画面遷移を行う方法はありますでしょうか?

  • iPhoneアプリ開発 Viewについて

    はじめまして。 butumechaと申します。 iPhoneアプリ開発で使用されるInterface Builderについてご質問がございます。 TextやLabelなどの配置をした後に、ImageViewを上から載せると前に載せたTextやLabelが背景の一番後ろに行ってしまい、ImageViewが上から覆いかぶさるようになってしまいます。 ImageViewを先に配置し、Textなどを打ち込めば良いのですが、あとで背景のImageViewを変更した時に知っておきたいのでやり方を教えてください。 Viewツリーから一番下にあるオブジェクトをドラッグしてもドラッグできませんでした。 ご教授して頂ければ幸いです。 よろしくお願い致します。

  • iPhoneアプリプログラミング

    iPhoneアプリ開発超初心者です。 「逆引きObjective-C for iPhoneアプリ」というサイトの中の http://www.objectivec-iphone.com/UIKit/UIImageView/UIImageView.html に、画像を表示するサンプルプログラムとして - (void)viewDidLoad { [super viewDidLoad]; // UIImageViewの初期化 CGRect rect = CGRectMake(10, 10, 250, 250); UIImageView *imageView = [[UIImageView alloc]initWithFrame:rect]; // 画像の読み込み imageView.image = [UIImage imageNamed:@"lena.png"]; // UIImageViewのインスタンスをビューに追加 [self.view addSubview:imageView]; } が紹介されているのですが、 メソッド - (IBAction)executeView:(id) sender {   // 画像表示 } の中で、画面上の特定位置への画像表示を指定する方法を教えてください。 上記のサンプルプログラムとメソッドを組み合わせるようなことをするのでしょうか? なにぶん超初心者で的外れなことを言っているかもしれませんが、よろしくお願いします。

  • iPhone アプリの起動画面について

    いつもお世話になっております。 表題の通り、xCode6.1を使い開発をしております。 iPad iOS7系で起動画面が表示されず困っております。 縦、画面固定、iOS7以降対応のアプリです。 状態  Launch Image Source : LaunchImage  Launch Screen File:LaunchScreen images.xcassets  iPhone Protrait iOS7,8 2x ⇒ 640*960  iPhone Protrait iOS7,8 Retina4 ⇒ 640*1136  iPad Portrait iOS 7,8 1x ⇒ 768*1024  iPad Portrait iOS 7,8 2x ⇒ 1536*2048 上記、4つのみ指定し後は白枠のままの状態です。 iOS8の端末では、iPad,iPhone,iPhoneHD 問わず、LaunchScreenが問題なく表示されます。 iOS7の端末では、iPhoneでは指定した画像が表示されますが、iPadでは起動画面が表示されることなく起動してしまいます。 基本的な所だと思いますが、よろしくお願い致します。

  • IBOutlet が認識されない

    Xcode3.2.5 で久しぶりにiPhoneアプリ作成の再勉強をしていますが、 IBOutlet が Interface Builder で認識しません。 手順### 新規プロジェクトで Window-based Application を選択して HelloWorldプロジェクトを作成。 ↓ HelloWorldAppDelegate.h に以下のように記述 #import <UIKit/UIKit.h> @interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; IBOutlet UILabel *label; //←追加 } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UILabel *label; //←追加 @end 保存して、MainWindow.xib をクリックし Interface Builder を起動しましたが、 Hello World App Delegate をみても IBOutlet の label が ちゃんと Inspector に表示されません。 以前、前のバージョンのXcodeで作成したものをみてみると ちゃんと反映されるのですが新バージョンのXcodeだと具合が違うようです。 ググってみると http://iphone-ipodtouch-development.blogspot.com/2010/10/inspector.html が一番この例に詳しいようですがうまくいきません。 この解決法の説明をよろしくお願い致します。

  • Objective-C for文でのインスタンス

    既出の質問と類似してますが、解決しないので質問します。 Objective-CのNSMutableArrayを使いラベルを複数個作りならべたいのですが、 変数iを使ってラベルに番号をつける方法がわかりません。 今のコードは NSMutableArray *tiles = [NSMutableArray array]; for( int i=0; i<25; i++ ){ UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0,0, tileSize,tileSize)]; label.text=[NSString stringWithFormat:@"%d",i]; [tiles addObject:label]; [self.view addSubview:label]; } です。 これを UILabel *label%d,i = [[UILabel alloc]initWithFrame:CGRectMake(0,0, tileSize,tileSize)]; のようにして、 label0、lable1、label2、label3・・・・ というように生成するにはどうしたらいいですか? Objective-C初心者です。 よろしくお願いします。

  • ボタンのtagの番号を値渡しする方法について

    今、xcodeでiphoneやipad用のアプリを作っています。 VIewController(VC)に30個くらいのボタンを置き、そのボタンのタグ番号に合わせて、SecondVIewContorller(SVC)で、画像がでてきて、それをタップしたら、次の画像へ移動するというようにしたいのですが、VCのボタンのタグ番号をSVCに送ろうとするところでひっかかっています。もし何かご助言が頂けたら誠に幸いです。よろしくお願いします。 以下、自分なりにつくったコードです。 <VCの実装> - (IBAction)pushBtn:(UIButton *)sender { [self performSegueWithIdentifier:@"mySegue" sender:self];} -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ if([segue.identifier isEqualToString:@"mySegue"]){ secondViewController*viewcon=segue.destinationViewController; viewcon.Number=[NSString stringWithFormat:@"%d",[sender tag]]; } これをSVCに送ってタグ番号をつけたいのですが、 以下の上から五行目のところの書き方のところでエラーがでてますが、他の書き方が わかりません。 <SVCの実装> - (void)viewDidLoad { [super viewDidLoad]; UIImage*imageDate=[UIImage imageNamed:@"%d,png",_Number]; CGRect rect=CGRectMake(0,0 ,200,200); UIImageView*imageView=[[UIImageView alloc]initWithFrame:rect]; imageView.image=imageDate; imageView.contentMode=UIViewContentModeScaleAspectFit; imageView.center=self.view.center; [self.view addSubview:imageView];} xcodeのバージョンは、5,0です。 重ね重ねよろしくお願いします。

  • xcode 画像をランダムに並べ順番に押す

    初めてですが質問よろしくお願いします。 iphone開発初心者です。 数字の画像をランダムに5×5に並べ、1から25まで順番に押していく、 というアプリを制作中なのですが行き詰まっています。 現在下記コードのようになっています。 画像を表示まではできたのですが、下記3つ、できればソースコードをお聞きしたいです。 (1)画像25個をランダムに表示する記述がわかりません (今はとりあえずで同じ画像を1つ入れてます。(img1~img25のimg1を代入中)) (2)順番に押していく処理 (3)画像を押された時に音を出したい - (IBAction)image:(id)sender { AudioServicesPlaySystemSound(sound_1); } の部分をうまく入れこめばいいのかと思っていますが、その入れこみ方もわかりません。 AudioToolboxは追加済みです。 どなたかご教授よろしくお願いします。 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSString *path = [[NSBundle mainBundle] pathForResource:@"btn_1" ofType:@"mp3"]; NSURL *url = [NSURL fileURLWithPath:path]; AudioServicesCreateSystemSoundID((CFURLRef)CFBridgingRetain(url), &sound_1); int yo = 5; for(int i = 0;i<yo; i++){ UIImageView *imageView = [UIImageView new]; imageView.frame = CGRectMake(15+60*i, 100, 60, 60); imageView.image = [UIImage imageNamed:@"img1.png"]; [self.view addSubview:imageView]; } int f = 25; for(int i = 0;i<f; i++){ UIImageView *imageView = [UIImageView new]; imageView.frame = CGRectMake(15+60*(i%5), 100+60*(i/5), 60, 60); imageView.image = [UIImage imageNamed:@"img1.png"]; [self.view addSubview:imageView]; } int rand = arc4random()%f; for(int i = 0; i<f; i++){ if(i == rand){ UIButton*button = [UIButton new]; button.frame = CGRectMake(15+60*(i%5), 100+60*(i/5), 60, 60); [button setImage:[UIImage imageNamed:@"img1.png"] forState:UIControlStateNormal]; [button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:button]; }else{ UIImageView *imageView = [UIImageView new]; imageView.frame = CGRectMake(15+60*(i%5), 100+60*(i/5), 60, 60); imageView.image = [UIImage imageNamed:@"img1.png"]; [self.view addSubview:imageView]; } } } - (IBAction)image:(id)sender { AudioServicesPlaySystemSound(sound_1); } -(void)buttonTapped{ } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end