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
[email protected] : 114 x 114
Icon-72.png : 72 x 72
Icon-Small.png : 29 x 29
[email protected] : 58 x 58
Icon-Small-50.png : 50 x 50
Default.png : 320×480
[email protected] : 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

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

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使うのが一番スマートかもしれない。
全データ舐めるってわけじゃないし。

UIButtonのアクション設定でハマった

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

動的に複数のボタンを作っていたら、ボタンを押したとたん落ちてしまう。
そんな状態にハマりました。^^;

CGRect rect = CGRectMake(mapX, mapY, MAP_DESK_YOKO_W, MAP_DESK_YOKO_H);
UIButton *button = [[UIButton alloc]initWithFrame: rect];
[button addTarget:self action:@selector(mapButtonTouch)
	forControlEvents:UIControlEventTouchUpInside];
[button setBackgroundColor:[UIColor redColor]];
button.tag = count;

comikechk[4537:207] *** -[ComikeMapViewController mapButtonTouch]: unrecognized selector sent to instance 0x48609a0

なんだろーなんだろーと検索しても有効な情報が得られない。
ふと、作例を載せているサイトを見ていたら…あっ!!

[button addTarget:self action:@selector(mapButtonTouch:)
	forControlEvents:UIControlEventTouchUpInside];

@selectorでメソッドを指定する時に最期の「:」を付け忘れただけでした。
うわー、まぬけすぎるw

release しても nil しとけ?

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

iPhoneプログラミングメモ。

処理進行中を表すために用いられるくるくる回るアニメーション
UIActivityIndicatorView が用いられますが、解放関係でハマったのでメモ。

[indicator stopAnimating];
[indicator removeFromSuperview];
[indicator release];

アニメーションをストップして、ビューから外して、解放しています。
が、このコードだと

-[UIActivityIndicatorView stopAnimating]: message sent to deallocated instance

なんてエラーになってしまいました。
releaseの後にさらに nilを代入したら問題なく動作するようになりました。

[indicator stopAnimating];
[indicator removeFromSuperview];
[indicator release];
indicator = nil;

おそらく他の部分で UIActivityIndicatorViewインスタンスの有無を
チェックして処理をわけている箇所があるので、そのへんが関係あるのかも。
ないのかも。

if( indidator ){
 〜くるくるアニメがある時の処理〜
}

あとはこのへんが多少なりとも関係しているんでしょうか?

CoreDataで日本語検索が上手くいかない

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

はじめてのあいぱっどあぷり。
略して「はじあい」。

そんなワタクシですが無謀にもCoreDataにまで手を出しています。
で、日本語検索が出来なくてハマったのでメモ。

「day」という項目に曜日が格納されており、
それごとにデータを抽出しようとしています。
「dayList」は曜日一覧をまとめたNSArray。
「gNowDay」は現在表示させたい曜日の番号です。

NSPredicate *preDay = [NSPredicate predicateWithFormat:@"day == '%@'",
	[dayList objectAtIndex:gNowDay]];
[request setPredicate:preDay];

これだとダメでした。
「'%@'」の部分を「'土'」など決め打ちにしたらいけました。

次はうまくいったコード。

NSString *preDayStr = [NSString stringWithFormat:@"day == '%@'",
	[dayList objectAtIndex:gNowDay]];
NSPredicate *preDay = [NSPredicate predicateWithFormat:preDayStr];
[request setPredicate:preDay];

一度NSStringに格納してからやったら出来ました。
そういうもんなのかー。

そしてこれは複合条件の指定。NSCompoundPredicateを使います。
「土曜の東館」とか指定するわけですね。

NSString *preDayStr = [NSString stringWithFormat:@"day == '%@'",
	[dayList objectAtIndex:gNowDay]];
NSPredicate *preDay = [NSPredicate predicateWithFormat:preDayStr];
NSPredicate *preArea = [NSPredicate predicateWithFormat:
	@"areaCode == %d",areaCode];
NSPredicate *allPre = [NSCompoundPredicate
	andPredicateWithSubpredicates:[NSArray arrayWithObjects:
	preArea, preDay, nil]];
[request setPredicate:allPre];

カテゴリー