2010年10月28日木曜日

CGRect等のログ表示

//CGRect
NSLog(@"%@",NSStringFromCGRect(testrect));
//CGSize
NSLog(@"%@",NSStringFromCGSize(testsize));
//CGPoint
NSLog(@"%@",NSStringFromCGPoint(testpoint));

2010年10月22日金曜日

UIScrollViewの初期化と設定

scrollRectToVisibleは下端が優先になる。上部起点で表示したい場合は
画面内に収まるCGRectを指定する。

※hファイルに<uiscrollviewdelegate>追加
- (void)viewDidLoad {
[super viewDidLoad];
UIView*contentView=[[UIView alloc]initWithFrame:CGRectMake(0,0,1000,1000)];
UIScrollView*Scroll=[[UIScrollView alloc]initWithFrame:[self.view frame]];
[Scroll addSubview:contentView];
[self.view addSubview:Scroll];
Scroll.contentSize=contentView.frame.size;
Scroll.delegate = self;
CGRect motorect=[self.view frame];
CGRect contentrect=[contentView frame];
//コンテント横が全体に収まるような拡大率を100%(最小表示)とする
//最小表示から5倍まで拡大できる
Scroll.minimumZoomScale = motorect.size.width/contentrect.size.width;
Scroll.maximumZoomScale = modeAScroll.minimumZoomScale*5;
//全体表示する(画面より縦長だと左上表示) YESでアニメーションあり
[Scroll setZoomScale:Scroll.minimumZoomScale animated:NO];
[Scroll scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO];
}
//ズームする場合は必要
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {  
return contentView;
}

UIViewの原点をかえる(未確認)

回転などの原点をかえるときに役立ちそう。
あとで確かめてみます

CGPoint pp;
pp = CGPointMake(0,0);
[self.view.layer setAnchorPoint:pp];

UIButtonのタイトルを複数行にする

ボタンにlineBreakModeを無理矢理設定する。通常はラベルに使うプロパティ。
ただし2行以上の場合[Btn sizeToFit];をしても、横長になってしまうため
ボタンの大きさは自分で調整する必要がある。

※追記 若干修正とスクリーンショットを追加してみました。

((UILabel*)Btn).lineBreakMode=UILineBreakModeWordWrap;

↓↓↓ついでにボタンのプログラム生成手順も。↓↓↓↓
- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton *Btn = [UIButton buttonWithType:
                        UIButtonTypeRoundedRect];
    [Btn setFrame:CGRectMake(0,0, 0.0, 0.0)];
    NSString*_name = @"長い長い長い長い長い長い長い長い"; 
    //10字1行として行数をカウント
    int column = ((int)([_name length]/10))+1;
    //改行コードを10字置きに入れる
    NSMutableString*str= [NSMutableString stringWithCapacity:1];
    int now = 0;
    int last = [_name length]-1;
    for(int cnt = 0; cnt < column; cnt++){
     if(cnt != column-1){
         [str appendFormat:@"%@\n",
         [_name substringWithRange:NSMakeRange(now,10)]];
         now += 10;
     }else{//最後
         [str appendString:[_name substringWithRange:
                            NSMakeRange(now,last-now+1)]];
     }
    }

    //複数行
    ((UILabel*)Btn).lineBreakMode = UILineBreakModeWordWrap;
    //タイトル
    [Btn setTitle:str forState:UIControlStateNormal];
    //ボタンのサイズ
    [Btn setFrame:CGRectMake(0,0,150,(14*column)+30)];
    //フォント
    [Btn.titleLabel setFont:[UIFont systemFontOfSize:14]];
    //文字を中央揃えに
    [Btn.titleLabel setTextAlignment:UITextAlignmentCenter];
    //文字色
    [Btn setTitleColor:[UIColor blackColor] 
                    forState:UIControlStateNormal];
    //タグ
    [Btn setTag:1];
    //アクション登録
    [Btn addTarget:self action:@selector(clickButton:)
                forControlEvents:UIControlEventTouchUpInside];
 
    //ボタンをビューに追加
    [self.view addSubview:Btn];
 
    Btn.center=self.view.center;
}

-(void)clickButton:(UIButton*)sender{
 NSLog(@"Click");
}

↓できあがりはこんな感じ↓

2010年10月21日木曜日

UIViewの削除について

//retainの場合
UIView *subView=[[UIView alloc]init];
[allView addSubview:subView]
[subView removeFromSuperview];
[subView release];//←ここでsubViewのdeallocが走る

//autoreleaseの場合
UIView *subView=[[[UIView alloc]init]autorelease];
[allView addSubview:subView]
[subView removeFromSuperview];//←ここでsubViewのdeallocが走る
/*[subView release];*///リリースするとエラーになる

リテインで追加直後にリリースした場合、
remove対象はどう指定するのだろうか…。
保持しておくか、subViewsメソッドで該当ビューを探すしかない?
autoreleaseが無難かも…

viewの追加する階層とサブビューの一覧を取得する

//ビュー1を一番上に追加
[allView addSubview:View1];

//ビュー2を一番下の階層に追加
[allView insertSubview:View2 atIndex:0];

//ビュー1の階層を一番下に変更
[allView sendSubviewToBack:View1];

//allViewのサブビューを配列で取得
NSArray*viewarray=[allView subviews];

2010年10月18日月曜日

気になっている課題点 走り書き

・技術メモ とてもわかりやすくて整理されている
ttp://i.studio23c.com/

・テン*シー*シー 暇を見つけてiphoneアプリ開発の項目を1から読みたい…
ttp://ameblo.jp/xcc/

・役に立ちそう UIViewから画像生成
ttp://www.insidenet.co.jp/mobile-app/iphone/rev-ref/97-uiviewuiimage-.html

・スクロールビューのズームなど
ttp://ameblo.jp/xcc/entry-10324498888.html
ttp://sygnas.jp/2010/07/11/uiscrollview_scroll/

・巨大画像をスクロールで表示
ttp://d.hatena.ne.jp/KishikawaKatsumi/20090429/1241020420

・高速列挙中に高速列挙のdict,arrayの中身をかえてはいけないらしい
ttp://journal.mycom.co.jp/column/objc/105/index.html

・タップとダブルタップで違うことをさせる
   >参考になりそうな記述発見
 ttp://d.hatena.ne.jp/KishikawaKatsumi/20090103/1230964461
 ttp://cocoadays.blogspot.com/2010/09/3.html
 ttp://rosetta-works.blogspot.com/
・UIViewのタップイベントを受け付ける
ttp://d.hatena.ne.jp/eth0jp/20100803/1280777298

・ファイル共有の設定
ttp://d.hatena.ne.jp/paraches/20101009

・web画像の非同期読込み(スクロール対応付き)
ttp://d.hatena.ne.jp/k_kinukawa/20110327/1301219131

特定文字で分割して配列に入れて返す

文字列をセパレータで分けて、配列にして返す
-(NSArray *) componentsSeparatedByString:(NSString *)separator

NSString *str;
NSArray *arr;
str = [[NSString alloc] initWithString:@"aaa:bbb:ccc:ddd:eee:fff"];
arr = [str componentsSeparatedByString:@":"];

2010年10月13日水曜日

よく使うビューサイズ

すべてピクセルW*Hで表記
iPhone4のRetinaは等倍する

>共通
・アイコン(appstore用 形式jpeg)512*512
>iPhone
・アイコン(ホーム用 形式png)57*57
・ステータスバー込全画面 320*480
・ステータスバーなし全画面 320*460
・ナビゲーションバー 320*44

>iPad
・アイコン(ホーム用 形式png)72*72
・ステータスバー込全画面 768*1024
・ステータスバーなし全画面 768*1004
・ナビゲーションバー 768*44
・ナビゲーションバー+ステータスバーありのビュー 768*960

2010年10月12日火曜日

お世話になっているサイト様一覧(随時更新予定)

・日本語リファレンス UIについて詳しく掲載
http://profo.jp/wiki/index.php?日本語リファレンス

・Cocoaリファレンス NSについて詳しく掲載
http://www.oomori.com/cocoafw/index.html

・ん・ぱか工房 IBに頼らないUIの生成などについて詳しく掲載
http://www.saturn.dti.ne.jp/%7Enpaka/index.html

・iPhoneアプリ開発の虎の巻 プロパティの詳細や基礎構文掲載
http://iphone-tora.sakura.ne.jp/index.html

・~けものみちを目指して~Only the Paranoid Survive ゲーム系の解説
http://d.hatena.ne.jp/jarinosuke0808/

・Objective-C初心者のためのC言語超入門 まさに自分のような人のための入門サイト…!
http://libro99.appspot.com/index2?id=542002

・初心者のためのObjective-Cプログラミング入門 通信部分が優しく解説されているのが嬉しい
http://libro99.appspot.com/index2?id=524006

・MetaArt 画像処理系がとてもわかりやすい 通信系も
http://iphone.moo.jp/app/

階層下のボタンや画像のタッチイベントを受け付ける

一つ上のViewがかぶさって下に配置しているボタンや
Viewにタッチイベントが効かない場合、
一つ上のビューのuserInteractionEnabledをNOにする。

aboveView.userInteractionEnabled=NO;

プロパティ
userInteractionEnabled
…YESならばタッチイベントやキーイベントが有効になる。デフォルト:YES

4隅を残して画像を伸縮させる

tretchableImageWithLeftCapWidth:topCapHeight:
画像の左上からピクセル数を指定。
その大きさで四隅を切り取って、
その四隅の間を伸縮する。
※ストレッチさせる画像は4隅を残したギリギリの
縦横サイズがいいっぽい。

//例 左10px上10pxを指定
UIImage *stretchImg = [[UIImage imageNamed:@"tes.png"]
stretchableImageWithLeftCapWidth:10 topCapHeight:10];
[button setBackgroundImage:stretchImage forState:UIControlStateNormal];

2010年10月8日金曜日

よく使うTableViewDelegate

//セクション数
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{
return num;
}
//セル生成
-(UITableViewCell*)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath*)indexpath{
static NSString*TableIdentifier=@"tablename";

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:TableIdentifier];
if(cell==nil){
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:TableIdentifier]autorelease];
}

NSInteger row= indexpath.row;
cell.textLabel.text=@"セルに表示する文字";
//cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;

return cell;
}

//セル選択時
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
(NSIndexPath*)indexPath{
//選択解除
[tableView deselectRowAtIndexPath:[ tableView indexPathForSelectedRow] animated:YES];
NSUInteger row =[indexPath row];
}

デバッグ

・メニュー[実行]→Objective-C例外時に停止にチェックを入れる
>デバッガでブレークポイントが貼られ、停止するらしい

・実行可能ファイル→情報の引数タブ「環境に設定される変数」に
下の3つを追加
NSZombieEnabled → YES
NSDebugEnabled → YES
MallocStackLogging → YES
>コンソールに詳しく止まった原因が出るらしい