UILabelの文字サイズを自動リサイズ

Posted 2010年7月20日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhoneプログラミングメモ。

動的に作成したUILabelの文字サイズを自動的にリサイズする方法です。
文字が表示枠からはみ出す時などに適用されます。
InterfaceBuilderでは簡単に設定できますよね。

label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 25);
label.font = [UIFont systemFontOfSize:20];
label.adjustsFontSizeToFitWidth = YES;
label.minimumFontSize = 14;
[self addSubview:label];
[label release];

fontプロパティで通常時の文字サイズを指定し、
adjustsFontSizeToFitWidthプロパティで自動リサイズを設定。
minimumFontSizeプロパティで最小フォントサイズを指定します。

UIScrollViewで任意の位置にスクロール

Posted 2010年7月11日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhoneプログラミングメモ。
UIScrollViewで任意の位置にスクロールする方法。

zoomToRectメソッドで表示する範囲を指定するだけという簡単さ。

CGRect rect = CGRectMake( 100,200, 400, 400 );
[scrollView zoomToRect:rect animated:YES];

しかし現在表示している範囲と上記で指定したサイズが違う場合
スケールが変わってしまいます。
出来る事ならスケールは変えたくないという場合がありますよね。
そんな時は現在のスケールを再指定してあげます。

// 現在のスケール
float scale = scrollView.zoomScale;

// ズームスクロール
CGRect rect = CGRectMake( 100,200, 400, 400 );
[scrollView zoomToRect:rect animated:YES];

// スケールを再指定
[scrollView setZoomScale:scale];

もっと面倒かと思ったらえらい簡単でびっくりしましたw

画面の表示方向と中心座標を取得

Posted 2010年7月7日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhone/iPadプログラミングメモ。

縦横どちらの画面でも中心に表示される UIViewを作っていたのですが、
[[UIDevice currentDevice] orientation]
を使っていたら実機で上手くいかなかったのでメモしておきます。

まず、上手くいかなかった理由としては UIDeviceの orientationプロパティには
回転方向だけでなく、画面が上向きか下向きかも存在していたからです。
それぞれ UIDeviceOrientationFaceUp、UIDeviceOrientationFaceDownです。

orientationプロパティでは「縦画面か横画面か」ではなく、本体の向き
であることを覚えておく必要があります。

対応策として、orientationプロパティを保存しておくことにしました。

続きを読む

メソッドを外部から渡せないの?

Posted | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

UIViewでアニメーションを行った後に実行するメソッドを
外部から指定することって出来ないかなーと思ってこんなふうに書いてみました。

結果としてエラーになったんですが、メソッドを渡すことって出来ないのかなぁ。
できました! 単なるタイプミスだったようです。^^;

-(void)startDialogAnimation:(id)delegateTarget action:(SEL)action{

	// アニメーション前準備
	// 画面の外にいったん出す
	CGRect frame = hogeView.frame;
	frame.origin.y = -100;
	[hogeView setFrame:frame];

	// アニメーション設定
	// 受け取ったオブジェクトとセレクターを設定してみた
	CGContextRef context = UIGraphicsGetCurrentContext();
	[UIView beginAnimations:nil context:context];
	[UIView setAnimationDelegate:delegateTarget];
	[UIView setAnimationDidStopSelector:action];
	[UIView setAnimationDuration:0.5];

	// アニメーションの完了値
	CGRect lastFrame =hogeView.frame;
	lastFrame.origin.y =300;
	[hogeView setFrame:lastFrame];

	[UIView commitAnimations]
}

呼び出すときはこんな感じ。

[dialogView startDialogAnimation:self action:@selector(hogeMethod)];

iPhoneアプリアイコンの光沢を消す

Posted | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhone/iPadプログラミングメモ。

iPhoneアプリを作るとき icon.png という名前で 57x57(iPadは72x72)ピクセルの
画像をXcodeに読み込ませれば自動的にアプリケーションのアイコンに
設定されてくれます。

ご丁寧なことに光沢エフェクト(グラデーションエフェクト)までついてくれる
のですが、それを消す方法。

気合いでiPhoneアプリ作成 - iPhoneアプリの作り方 - | アプリケーション・アイコンの光沢を消すには

info.plist に「UIPrerenderedIcon」という項目を作り、True(チェックを入れる)に
設定すればいいそうな。

ちなみに Xcode 3.2.3でやったら
Icon already includes gloss effects
という名前に自動変換されました。

ちなみにアイコンについては「ヒューマン インターフェイス ガイドライン」に
掲載されているのですが、ファイル名については書かれてませんでした。

iPhone4になって解像度があがり、必然的にアイコンの画素数も変わりました。
NAGAOKA STATIONさんのまとめによると
下記のような感じらしいです。多っ!!

Icon.png : 57 x 57
Icon@2x.png : 114 x 114
Icon-72.png : 72 x 72
Icon-Small.png : 29 x 29
Icon-Small@2x.png : 58 x 58
Icon-Small-50.png : 50 x 50
Default.png : 320×480
Default@2x.png : 640 x 960
Default-Landscape.png : 768 x 1024
Default-Portrait.png : 768 x 1024
Default-LandscapeRight.png : 768 x 1024
Default-LandscapeLeft.png : 768 x 1024
Default-LandscapeDown.png : 768 x 1024

アイコン関係はこのへんも参考になりそう。

FlashCS4 + Progression4でAdobeAIRアプリ

Posted 2010年7月4日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

作ろうとしたらProgressionプロジェクトの新規作成のところで何故かAdobeAIRが選べない。

おかしいなーと思いつつAdobe Flash Support Centerから
Adobe Flash CS4 Professional Update (10.0.2) 05/13/2009
を落としてきてインストールしたら選べるようになりました。

あれ?前に作ったのってマシン環境新しくする前だったっけ?

iPhone実機だと画像が表示されない

Posted 2010年7月3日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhoneプログラミングメモ。

シミュレータだと問題ないのに実機で動作させると画像が表示されない。
調べてみるとファイル名の大文字小文字問題があるとか。

シミュレータ…大文字小文字区別ナシ
実機…区別アリ

でも今回ワタクシが遭遇したのはファイル名の間違いは一切なく、
仕様なのかバグなのかよくわからないものでした。

Xcode>キャッシュを空にする
ビルド>すべてのターゲットをクリーニング
もやってみたのですが治りませんでした。

で、自分の場合は下記の方法で治りました。
単純に画像を再登録するだけなのですが、リンク切れを意図的に発生させています。

  1. Xcodeに画像を登録
  2. 登録した画像を別のフォルダに移動
  3. リンク切れになる(意図的に発生させた)
  4. リンク切れになった画像をXcode上から削除(リンク解除するだけ)
  5. 画像を再度Xcodeに登録

なんなんでしょうねえ。

Object-Cで多次元配列とか

Posted 2010年7月2日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhoneプラグラミングメモ。

たとえばコミケのスペースの座標をまとめた配列を作るとき
「Aブロックの、1番目の、左上座標」みたいな表になるわけですが

NSDictionary *mapPosList = [NSDictionary dictionaryWithObjectsAndKeys:
							[NSArray arrayWithObjects:
							 [NSDictionary dictionaryWithObjectsAndKeys:
							  [NSNumber numberWithInt:100], @"left",
							  [NSNumber numberWithInt:200], @"top",
							  [NSNumber numberWithInt:50], @"width",
							  [NSNumber numberWithInt:125], @"height",
							  nil
							  ],
							 nil
							 ],
							@"A",
							nil
							];

NSLog(@"%d",  [[[[mapPosList objectForKey:@"A"] objectAtIndex:0] objectForKey:@"left"] intValue]);

という感じの、一目みてもわけわからん定義と呼び出しになるわけです。
もっとスマートな記述方法ないですかねえ…。

ActionScriptや JavaScriptに慣れていると

var mapPosList:Objects = {
	"A":[
		{left:100, top:200, width:50, height:125}
	]
};

trace( mapPosList['A'][0].left  );

くらいシンプルなのが当たり前だからなぁ…。

XMLで座標一覧作って、XPath使うのが一番スマートかもしれない。
全データ舐めるってわけじゃないし。

カテゴリー