タグ別アーカイブ: iPhone

UITabBarControllerのTabItem画像が表示されない!

UITabBarControllerを利用して画像が表示されなくてこまりました。


Tabbar Doesn't appear.

原因は画像データには alpha channel を含んでないとだめだそうで、よくよく調べるとalphaをグレースケール表示しているようでした。

例のごとく、
stackoverflow:Tab bar image icon doesn’t appear

Photoshopでalphaチャンネル付き画像データを作る

※Photosho CS6(Mac)
せっかくなのでPhotoshopを使って alpha 含むTabBarItem用のpng作成手順を残します。
alphaChannel000
最終的に Script > Export Layers to Files…を行うので、画像のようにレイヤー単位で画像を保持させておきます。
一番上のレイヤーのブラジル国旗をベースに作成をします。
alphaChannel001
Layer > Layer Mask > Revel all で真っ白なレイヤーマスクを追加。

alphaChannel002
Window > Channel で Channel を表示。Layer Maskを追加しているので(画像では黒だけど)白いチャンネルが表示され、非表示になってる。
Greenのチャンネルをコピーし、全体を非表示にしてから、Alphaだけを可視化(目のマーク)にする。
alphaChannel003
可視化したらGreenのチャンネルをペーストする。

alphaChannel004
ペーストしたら、可視状態をalphaを不可視化してRGBを可視化する。

alphaChannel005
完成はご覧の通り。

Screen Shot 0024-12-04 at 20.16.57
やったね!

ほめられデザイン事典 グラフィック・ワークス Photoshop & Illustrator

iAdを固定位置にするサンプル

iAdの位置固定方法を調べて最適解を得たのでメモ。

やっていること

iAdを表示するviewを作成。
iAdのviewを固定位置にするためだけのUIViewを生成。
UIViewはスクロールの度に走る次のイベントで位置を設定しなおす。

- (void)scrollViewDidScroll:(UIScrollView *)

サンプル

- (void)viewDidAppear:(BOOL)animated{
   
    [super viewDidAppear:animated];
    //for iAd initialization
    //tmp view

    // iAdViewContainerはUIViewクラスのメンバ。
    if(iAdViewContainer_ == nil){
        iAdViewContainer_ = [[UIView alloc]initWithFrame:self.view.frame];
        [self.view addSubview:iAdViewContainer_];
       
        //adView_ はADBannerViewクラスのメンバ
        adView_ = [[ADBannerView alloc] initWithFrame:CGRectMake(0.0, 367.0, 320.0, 50.0)];
        adView_.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
        [iAdViewContainer_ addSubview:adView];
    }   
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    [self resetIAdPosition];
}
- (void)resetIAdPosition
{
    [iAdViewContainer_ setFrame:CGRectMake(
                                           self.tableView.contentOffset.x,
                                           self.tableView.contentOffset.y,
                                           0,0)];
    [self.view bringSubviewToFront:iAdViewContainer_];
}

解説

画面下部に固定させたいので、iAd自身とそれを固定位置で保持するviewの2つを生成する。
片方は色々なところで参照するのでメンバ変数として定義しておく。
サンプル上ではiAdViewController_がUIView型のメンバだ。

viewDidApearイベント時にで、画面に指定のコントローラが保持するViewが出現した際にiAdを生成する。

補足

tableView:titleForHeaderInSection:で項目名や、
tableView:titleForFooterInSection:で説明文を入れていると、
viewが手前に配置されてしまい、iAdのバナーよりもうしろになる。
これを回避するために、奥に成ってしまっているiAdのz-indexを手前に描画されるようにresetIAdPositionでviewのソートをさせている。
これで手前側に移動させることができる。

ただし、推奨とされている表示方法はもう一段階踏み込まなければ成らない。
それは表示可能になった際にはじめて表示するというもの。
オブジェクトとして生成してから表示が可能になるまでに時間がかかるので、その間は画面外にでも配置しておくべき。
これは別途記事にする。

参考

サルにもできるiPhoneアプリの作り方iAdを設置してみよう! その1
※ソースはほとんどここのものがベース。
StackOverFlow:How to set iPhone UI View z index?

iOS5プログラミングブック
加藤 寛人 吉田 悠一 藤川 宏之 西方 夏子 関川 雄介 高丘 知央
インプレスジャパン
売り上げランキング: 2989

Unity remote 3を今更

Unity Remote3 というアプリを試しました。

http://itunes.apple.com/jp/app/unity-remote-3/id394632904?l=en&mt=8

無線で、iOSデバイスに画面を転送しつつ、入力周りを受取るテストができます。

画面は圧縮されたものが転送されて表示されるのでガッビガビです。

それでもジェスチャーを転送してくれるので入力周りに特化したテストとして用いる分には問題無いかと思います。

 

【objective-c】 setKeyboardType一覧


setKeyboardTypeで指定する定数がいっぱいあったので一覧化。
違いがわかったりわからなかったり。

iOSでテキスト入力箇所をアクティブにした際に呼ばれるキーボードの指定一覧

指定

サンプル
UIKeyboardAppearanceDefault

UIKeyboardTypeDefault1
UIKeyboardTypeDefault2

UIKeyboardTypeTwitter

UIKeyboardTypeTwitter1UIKeyboardTypeTwitter2

UIKeyboardTypeAlphabet

UIKeyboardTypeAlphabet

UIKeyboardTypeEmailAddress

UIKeyboardTypeEmailAddress1
UIKeyboardTypeEmailAddress2

UIKeyboardTypePhonePad

UIKeyboardTypePhonePad

UIKeyboardTypeNumberPad

UIKeyboardTypeNumberPad

UIKeyboardTypeURL

UIKeyboardTypeURL1UIKeyboardTypeURL2

UIKeyboardTypeNumbersAndPunctuation

UIKeyboardTypeNumbersAndPunctuation1UIKeyboardTypeNumbersAndPunctuation2

UIKeyboardTypeASCIICapable

UIKeyboardTypeASCIICapable

UIKeyboardTypeDefault

UIKeyboardTypeDefault1UIKeyboardTypeDefault2

おまけ

テキストエリア生成コードサンプル

objective-c:
-(UITextField*)makeTextField:(CGRect)rect text:(NSString*)text type:(NSInteger*)type{
    //テキストフィールドを生成し、rect,text,色,キーボードに関する情報をセットして返す。
    UITextField* textField = [[[UITextField alloc] init] autorelease];
    [textField setFrame:rect];
    [textField setBackgroundColor:[UIColor whiteColor]];
    [textField setBorderStyle:UITextBorderStyleRoundedRect];
    //以下がキーボード関連。キーボードのアピアランス、キーボードの種別、改行キーの種別
    [textField setKeyboardAppearance:UIKeyboardAppearanceDefault];
    switch((NSInteger)type){
        case 1:
            [textField setKeyboardType:UIKeyboardTypeDefault];
            [textField setText:@"UIKeyboardTypeDefault"];
            break;
        case 2:
            [textField setKeyboardType:UIKeyboardTypeASCIICapable];
            [textField setText:@"UIKeyboardTypeASCIICapable"];
            break;
        case 3:
            [textField setKeyboardType:UIKeyboardTypeNumbersAndPunctuation];
            [textField setText:@"UIKeyboardTypeNumbersAndPunctuation"];
            break;
        case 4:
            [textField setKeyboardType:UIKeyboardTypeURL];
            [textField setText:@"UIKeyboardTypeURL"];
            break;
        case 5:
            [textField setKeyboardType:UIKeyboardTypeNumberPad];
            [textField setText:@"UIKeyboardTypeNumberPad"];
            break;
        case 6:
            [textField setKeyboardType:UIKeyboardTypePhonePad];
            [textField setText:@"UIKeyboardTypePhonePad"];
            break;
        case 7:
            [textField setKeyboardType:UIKeyboardTypeEmailAddress];
            [textField setText:@"UIKeyboardTypeEmailAddress"];
            break;
        case 8:
            [textField setKeyboardType:UIKeyboardTypeAlphabet];
            [textField setText:@"UIKeyboardTypeAlphabet"];
            break;
        case 9:
            [textField setKeyboardType:UIKeyboardTypeTwitter];
            [textField setText:@"UIKeyboardTypeTwitter"];
            break;
        default:
            break;

    }
    [textField setReturnKeyType:UIReturnKeyDone];
    return textField;
}

iOSプログラミング逆引きリファレンス108 ~知りたいことがすぐわかるiPhoneプログラミングテクニック~

iPhoneプログラミングUIKit詳解リファレンス

iOSデバッグ&最適化技法 for iPad/iPhone
詳解 Objective-C 2.0 第3版