プロジェクションマッピング

エンターテインメントから工業利用まで、プロジェクションマッピングの活用・運用をお考えの方へ

more

インタラクティブ&サイネージ

情報表示用のデジタルサイネージから、センサーを利用したインタラクティブ要素などをお考えの方へ

more

VR/360MOVIE

VRHMD用コンテンツからプラットフォームを利用した360度ムービーを活用したPRをお考えの方へ

more
CONTACT 052-253-9866

【Xcode】addsubviewでシンプルなモーダルウインドウを表示

2014.06.20 金曜日 07:59:13

PAK26_suitekitex20140209_02

iOSアプリ内で、ユーザーに別ウインドウで情報を伝えたい場合があると思います。
例えば、アプリ起動後に自動的に「お知らせ」ウインドウを表示させたり、
何かコンテンツをダウンロードした場合「ダウンロード完了しました」というようなものです。

AlertViewを使用する方法もあるのですが、
カスタマイズが自由にできないですし(AlertViewはカスタマイズする物ではないという意見もあります)
別にユーザーに警告を発しているわけではない場合、addsubviewで表示させる方法が便利だと思います。

そこで今回は、シンプルなモーダルウインドウを生成するコードを紹介します。

変数の宣言

まず、ViewController.m内でUIViewの変数宣言を行います。
生成の際にその都度変数化しても良いのですが、今回はここで行っておきます。

@interface ViewController ()
{
}
//モーダルの背景
@property (strong, nonatomic) IBOutlet UIView* modalBg;
@end

addsubviewで生成

続いて、生成部分の記述です。
色、サイズ、位置は用途に応じて変更してください。アルファ値を調整すれば、半透明のウインドウにも出来ます。
表示エフェクトは今回アニメーションで、フェードインするようにしました。

- (void)modalOpen {
    //モーダル背景の生成
    _modalBg =[[UIView alloc] initWithFrame:CGRectMake(0,0,320,720)];
    _modalBg.backgroundColor =  [UIColor colorWithWhite:0 alpha:0.3];
    [self.view addSubview:_modalBg];
    
    // モーダルウインドウの生成
    UIView *titleBg =[[UIView alloc] initWithFrame:CGRectMake(20,200,280,100)];
    titleBg.backgroundColor =  [UIColor colorWithWhite:1 alpha:1];
    
    
    [titleBg setAlpha:0.0];
	titleBg.backgroundColor = [UIColor colorWithWhite:0 alpha:1];
    
	// アニメーション
	[UIView beginAnimations:nil context:NULL];
	// 秒数設定
	[UIView setAnimationDuration:0.4];
	[titleBg setAlpha:1];
	
	titleBg.backgroundColor = [UIColor colorWithWhite:1 alpha:1];
    [_modalBg addSubview:titleBg];
	[UIView commitAnimations];
    
    //ラベルを生成
    UILabel *titleLabel = [[UILabel alloc] init];
    titleLabel.frame = CGRectMake(0, 20, 280, 25);
    titleLabel.text = @"モーダルウインドウを表示";
    titleLabel.textAlignment = UITextAlignmentCenter;
    titleLabel.textColor = [UIColor colorWithRed:0.238 green:0.501 blue:0.593 alpha:1.000];
    titleLabel.font = [UIFont boldSystemFontOfSize:13];
    
    
    [titleBg addSubview:titleLabel];
    UIButton* noButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    
    noButton.frame = CGRectMake(0,55,280,30);
    [noButton setTitle:@"モーダルを閉じる" forState:UIControlStateNormal];
    
    noButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
    [noButton.titleLabel setFont:[UIFont boldSystemFontOfSize:13]];
    noButton.tintColor = [UIColor colorWithRed:0.238 green:0.501 blue:0.593 alpha:1.000];
    
    // ボタンの動作
    [noButton addTarget:self action:@selector(close:) forControlEvents:UIControlEventTouchUpInside];
    
    // 作成
    [titleBg addSubview:noButton];
    
}
- (void)close:(id)sender {
 	//モーダルを閉じる
    [_modalBg removeFromSuperview];
}

以上で完成です!
あとは、生成したい場所、アプリ起動時のお知らせならviewdidload等で以下の記述をすればOKです!

 [self modalOpen];

一度作成しておけば、色々なところで使えそうです!

Category:Development , iOS , Mac , Xcode     Tag:
Authorブログの著者について
田中 義弘

田中 義弘

イベントプロダクション・グラフィックデザイナーを経て、2010年3月に株式会社アイデアクラウドを設立。近年、WEBから得た技術をベースに、プロジェクションマッピング事業をはじめとした先端事業をスタート。

Our Business
最近の記事
人気記事
Our Project