ペーパープロトタイピング用のステンシルを入手しました
UI Stencilsで購入しました。
ステンレス製のステンシルシートと専用の用紙。
用紙の方は、ポストイット的な裏面にのりが付いてるタイプと ノート型の3連タイプを入手しました
実寸の140%のサイズなので、ほかのペーパープロトタイピング用紙には使えないと思います。
PDFも配布されているので、ステンシルシートさえ入手すればいくらでも画面設計ができそうですね。
iOS7対応なので2月1日以降も安心ですねw
アプリ実行中にステータスバーのサイズが変更された際の対処
通話中やテザリング中などはステータスバーのサイズが変更されるので
ビューの表示の際には
[[UIScreen mainScreen] applicationFrame].size.height
を使ってアプリケーションエリアのサイズを取得し、これを基準にビューの表示を行いましょう!と言うおはなし。
但し、ビューの表示中にステータスバーの変更があった場合は 通知かデリゲートでイベントをフックし必要があれば再描画等の処理を行います。 (通知の設定を行った際は通知解除も忘れずに)
通知の設定
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarWillChange) name:UIApplicationWillChangeStatusBarFrameNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarDidChange) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
デリゲートメソッド
- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame{ // NSLog(@"appHeightDidChange=%f",[[UIScreen mainScreen] applicationFrame].size.height); } - (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{ // NSLog(@"appHeightWillChange=%f",[[UIScreen mainScreen] applicationFrame].size.height); }
iPhoneとiPadの判別
端末の判別に[[UIDevice currentDevice].model
を使用する事がありますが、このやり方だとiPhone, iPad, iPodTouch, iPhone Simulator, iPad Simulatorの値が返ってくるため、単純にユニバーサルアプリ等でiPhone, ipadの判別をしたい場合は処理が煩雑になったりします。
ここは素直にUniversalアプリのテンプレに従って
[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone
[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad
で判別し、例えば
#define is_iPad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad ? YES:NO)
このようなマクロを設定しておくのが良さそう。
使用例
#define is_iPad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad ? YES:NO) NSLog(@"iPad=%d",is_iPad); //iPhone iPad=0 //iPad iPad=1
モーダルビューの背後のナビゲーションコントローラー, タブバーコントローラーを操作する
モーダルビューを閉じる際に背後のナビゲーションコントローラーやタブバーコントローラーを操作する場合、 親ビューに通知を飛ばして画面遷移、タブ切換えの操作をしてもいいのですが、記述が分散したり、モーダルが複数のビューから呼ばれる可能性がある場合は途端に処理が煩雑になってきます。
こんなときは[self presentingViewController]
を使って呼び出し側の操作をする事ができます。
背後にナビゲーションコントローラーがいる場合
hogeViewController *hoge = [hogeViewController new]; UINavigationController *nav = (UINavigationController *)[self presentingViewController]; [nav pushViewController:hoge animated:YES]; [self dismissViewControllerAnimated:YES completion:nil];
背後にタブバーコントローラーがいる場合
UITabBarController* tab = (UITabBarController*)[self presentingViewController]; [tab setSelectedIndex:1]; [self dismissViewControllerAnimated:YES completion:nil];
これで、通知の記述やモーダルを呼び出し側の画面遷移のメソッド等を書かなくてもいいのですっきりとしましたね。
google Analytics3の基本的な設定方法
iPhoneアプリ申請直前にgoogle Analyticsを確認してみたら、
早くもver.3が出ていたので設置してみました。
SDKのダウンロードはこちら
基本的にはここの情報に従って設定を行います。
下準備
コピーするファイルは以下の通り
- GAI.h
- GAITracker.h
- GAITrackedViewController.h
- GAIDictionaryBuilder.h
- GAIFields.h
- GAILogger.h
- libGoogleAnalyticsServices.a
Libraryフォルダから
libGoogleAnalytics_debug.aを抜いて
libGoogleAnalyticsServices.aを追加し、プロジェクトにコピーします。
次に以下のFramework、libを追加します。
(上記の操作でlibGoogleAnalyticsServices.aは追加されているはず)
- libGoogleAnalyticsServices.a
- CoreData.framework
- SystemConfiguration.framework
- libz.dylib
イニシャライズ
AppDelegate.mで以下を記述
@interface AppDelegate(){ id<gaitracker> tracker; } @end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //googleAnalytics [GAI sharedInstance].trackUncaughtExceptions = YES; [GAI sharedInstance].dispatchInterval = 20; [[[GAI sharedInstance] logger] setLogLevel:kGAILogLevelVerbose]; tracker = [[GAI sharedInstance] trackerWithTrackingId:@" UA-XXXX-Y"]; return YES; }
※UA-XXXX-Yは各自でIDを取得して書き換えてください。
※trackerの行で不具合が出ていますね。
正しくは
tracker = [[GAI sharedInstance] trackerWithTrackingId:@" UA-XXXX-Y"];
画面を開いたポイントを計測
この計測には2通りのやり方があるようです。
1.自動計測
以下のように
GAITrackedViewController.hをインポートし
GAITrackedViewControllerを継承します
#import "GAITrackedViewController.h" @interface HomeViewController : GAITrackedViewController
こうすることで、viewDidAppearなどに
self.trackedViewName = @"About Screen";
と記述する事で計測ができます。
2.手動計測
GAI.h
GAIFields.h
GAIDictionaryBuilder.h
をインポートします。
毎回書くのが面倒であればxxxx-Prefix.pchに書いておきましょう。
id tracker = [[GAI sharedInstance] defaultTracker]; [tracker set:kGAIScreenName value:@"screen name"]; [tracker send:[[GAIDictionaryBuilder createAppView] build]];
これで計測ができるはずです。
イベントの取得
ボタンを押されたタイミング等で以下を記述します。
categoryとactionは必須のようです。
id tracker = [[GAI sharedInstance] defaultTracker]; [tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"category" // Event category (required) action:@"action" // Event action (required) label:@"label" // Event label value:nil] build]]; // Event value
これで、最低限の計測はできるはずです。
iOS7のステータスバーの電池アイコンの色
iOS7になってステータスバー周りの仕様が一部変更され、
バッテリー表示も緑色のアイコンになりました。
ところが、ふとした瞬間にバッテリーのアイコンを見ると、
アプリによっては白黒表示されている モノもある事に気付きました。
ステータスバーの色によっては緑色がマッチしない場合もあり、この表示を白黒に変更するやり方を必死で探したのですがどこにも見つからず、途方に暮れていた時に発見してしまいました。
給電されていない時は白黒表示になる!
というオチでした
なんでもっと早く気付かなかったんだorz..