FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

画面の回転でハマる [Xcode]

今開発中のアプリで、「机の上などに置いて画面が上向きになったらxxの処理をする」という動作を実装しました。
ポイントは以下です。

interfaceOrientation == UIDeviceOrientationFaceUp

UIDeviceOrientationFaceUpというのが「画面上向き」ですね。
ちなみに「画面下向き」は UIDeviceOrientationFaceDownです。

「画面が上向き」というのはシミュレータでは確認できないので、iPhoneの実機にアプリを転送して確認。
ところが、何度iPhoneの向きを変えても、全く処理が実行されません。NSLogやブレークポイントであれこれ調べると、なぜだか interfaceOrientationの値が変わっていない様子。でもその原因が分かりません。うむむ。

で、ふと確認すると、iPhoneに回転ロックがかかっていたのが原因でした。
ロックを外すと、スムーズに処理が実行されました。なんだい。

ミュートボタンが入ってるのに「音が出ない」と言ってるのと同じですね。
意外なところでハマってしまいました。
関連記事
スポンサーサイト

ヘルプ画面を作る [Xcode]

画像と箇条書きの文章で作られた、アプリのヘルプ画面を作ろうと思い立ちました。

最初は UIScrollViewを使ってみようとしてアレコレやってみましたが、画像位置やら箇条書きの位置やらの細かいところの調整がなかなかうまく行きません。
そこで、ヘルプの内容はローカルに htmlで作成し、それを UIWebViewで読み込んで表示することにしました。

まず、ヘルプを記載した "help_j.html"をプロジェクトに読み込みます。また画像やCSSもプロジェクトに読み込めば html内で使用できます。


次に、.m内に以下のコードを書きます。

- (void)viewDidLoad
{
[super viewDidLoad];

// UIWebViewを準備
// (ステータスバーとナビゲーションバーの高さ64pxを削る)
UIWebView *webView = [[UIWebView alloc] initWithFrame:
CGRectMake(0.0, 0.0, 320.0, 480.0-64.0)];

// help_j.html読み込み
NSString *path = [[NSBundle mainBundle] pathForResource:@"help_j" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[webView loadRequest:req];

// webViewをくっつける
[self.view addSubview:webView];
}

実行すると、help_j.htmlの内容が iPhoneの画面に表示されます。文字の整列や枠線・色づけはCSSによるものです。

この方法ならば表示内容はHTML側で柔軟に調整でき、内容の量に応じてスクロールにも対応してくれます。

ただし、プロジェクト内では階層がフラットなベタ展開になるので、 html内でパス指定に階層を使わないように注意が必要です。

関連記事

subViewに置いたUIButtonがクリックできない [Xcode]

プログラムで画面上にsubviewを配置して、そこに情報表示用のボタンを置きました。
コードはこんな感じです。

// subviewを配置
UIImageView *view1 = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 55.0, 320.0, 125.0)];
view1.image = [UIImage imageNamed:@"view1.png"];
[self.view addSubview:view1];

// subviewにボタンを追加
settingBtn = [UIButton buttonWithType:UIButtonTypeInfoLight];
settingBtn.frame = CGRectMake( 15.0, 115.0, 18.0, 19.0);
[settingBtn addTarget:self action:@selector(showInfo:)
forControlEvents:UIControlEventTouchUpInside];
[view1 addSubview:settingBtn];


実行してみると無事にsubViewとボタンは表示されましたが、いくらボタンをタッチしても反応がないんです。

いろいろ調べてみたら、そもそもボタンを押したと認識されてない様子。試しにsubView上ではなく [self.view addSubview:settingBtn]; としてメインのviewにボタンを置いたら、ちゃんと反応します。どうやらタッチイベントが subViewではなくメインviewで発生したと見なされているみたいです。



数時間ハマって、やっと解決策を見つけました。

// subviewを配置
UIImageView *view1 = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 55.0, 320.0, 125.0)];
view1.image = [UIImage imageNamed:@"view1.png"];
view1.userInteractionEnabled = YES;
[self.view addSubview:view1];

// subviewにボタンを追加
settingBtn = [UIButton buttonWithType:UIButtonTypeInfoLight];
settingBtn.frame = CGRectMake( 15.0, 115.0, 18.0, 19.0);
[settingBtn addTarget:self action:@selector(showInfo:)
forControlEvents:UIControlEventTouchUpInside];
[view1 addSubview:settingBtn];


view1.userInteractionEnabled = YES; を一行追加するだけで、subView上のボタンが押せるようになりました。
userInteractionEnabledの値はUIViewではデフォルトで YESなんですが、UIImageViewではなぜかデフォルトで NOになってるので、YESにしないとsubViewにボタンを置いても反応しなかったんですね。
最初からYESの方がいいなぁ。


「subViewに置いたUIButtonがクリックできない その2」に追記があります。
関連記事
Appご紹介
K app designのAppをご紹介します

ねこわけ

画面中央の猫を次々に仕分けるゲームです。

あまり計算機

あまりを計算できる割算専用の計算機です。

6オクターブ ピアノ

6オクターブ鍵盤のピアノアプリです。iPad専用。

Dynamic Drum

様々な演奏法が楽しめるドラム演奏アプリです。

クイズボタン

早押しクイズのサポートをするアプリです。

クイズボタン Pro

クイズボタンに点数表示機能が付きました。

クイズボタン HD

クイズボタンのiPad専用版。回答者ボタンが8つに増量。

ベロシティ ピアノ

タップの強弱で音量が変わるピアノアプリです。

TIMERx4

4つのキッチンタイマーを同時に動作できるアプリです。

アナデジClock

アナログとデジタルが融合した時計です。
検索フォーム
最新記事
最新コメント
カテゴリ
人気ページ
月別アーカイブ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。