delegateやらprotocolやらどっちに宣言するんだがごっちゃになるので図にしてみた。
たぶんこれであってる…はず。
2010年12月24日金曜日
2010年12月21日火曜日
UIViewからUIImageを生成
//UIViewからUIImage作成
追記:生成される画像はautoreleaseが走る…らしい。
多分大丈夫?
- (UIImage *)createImage:(UIView *)view { UIImage *createImage; UIGraphicsBeginImageContext(view.frame.size); [view.layer renderInContext:UIGraphicsGetCurrentContext()]; createImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return createImage; }生成したUIImageがキャッシュに残るかは調べ中
追記:生成される画像はautoreleaseが走る…らしい。
多分大丈夫?
2010年12月17日金曜日
ipadアプリの外部出力(ミラーリング)
フリーで素敵なソースがありました。
iPadの画面を外部モニタへ出力する「TVOutManager」
中を見たけど難しい…じっくり解析します。
何となく仕組みがわかったので追記;
使い方は
1.TVOutManagerクラスを使いたいプロジェクトに入れる
2.初期表示するビューコンにTVOutManager.hをインポート
3.切り替えスイッチを用意してオンで
[[TVOutManager sharedInstance] startTVOut];
オフで、
[[TVOutManager sharedInstance] stopTVOut];
を実行する
※確認にはiPad専用のVGAアダプタと外部出力モニタが必要
>iPad自体にミラーリング機能はない…不便だ
>TVOutManagerは実機で表示しているスクリーンを画像化して、
外部出力に貼付ける作業を別スレッドで定期的に行う
ことでミラーリングしているようにみせているっぽい
>どうやらスクロールなど他の処理が走っている際には
画像の更新を行わない。スクロールはかくかく表示になる
>viewdidloadにスタートメソッドを入れてもなぜかうまく
動作しない。明示的にボタンなどでスタートさせないとうまく行かなかった。
viewdidloadにタイマー仕込んでも駄目だった。
>実機の回転対応はするが、やたらと回転する。修正が必要?
(初期画面がlandscapeだと縦に表示されてしまうなどの問題も)
>外部と実機2つのwindowに同じインスタンスを乗せることができない…?
これができたらわざわざ画像化なんてしないか…。
わーJailbreakしてしまいたいー。
*外部出力で参考になった記事*
[iPad] 外部ディスプレイに出力する
[iPad] 外部出力方法
iPadからVGA出力
iPadでの外部モニタ出力←Jailbreakの方法も
iPadの画面を外部モニタへ出力する「TVOutManager」
中を見たけど難しい…じっくり解析します。
何となく仕組みがわかったので追記;
使い方は
1.TVOutManagerクラスを使いたいプロジェクトに入れる
2.初期表示するビューコンにTVOutManager.hをインポート
3.切り替えスイッチを用意してオンで
[[TVOutManager sharedInstance] startTVOut];
オフで、
[[TVOutManager sharedInstance] stopTVOut];
を実行する
※確認にはiPad専用のVGAアダプタと外部出力モニタが必要
>iPad自体にミラーリング機能はない…不便だ
>TVOutManagerは実機で表示しているスクリーンを画像化して、
外部出力に貼付ける作業を別スレッドで定期的に行う
ことでミラーリングしているようにみせているっぽい
>どうやらスクロールなど他の処理が走っている際には
画像の更新を行わない。スクロールはかくかく表示になる
>viewdidloadにスタートメソッドを入れてもなぜかうまく
動作しない。明示的にボタンなどでスタートさせないとうまく行かなかった。
viewdidloadにタイマー仕込んでも駄目だった。
>実機の回転対応はするが、やたらと回転する。修正が必要?
(初期画面がlandscapeだと縦に表示されてしまうなどの問題も)
>外部と実機2つのwindowに同じインスタンスを乗せることができない…?
これができたらわざわざ画像化なんてしないか…。
わーJailbreakしてしまいたいー。
*外部出力で参考になった記事*
[iPad] 外部ディスプレイに出力する
[iPad] 外部出力方法
iPadからVGA出力
iPadでの外部モニタ出力←Jailbreakの方法も
2010年11月29日月曜日
SQLiteのDBにUIImageを格納する
UIImage→NSDateに変換後、DBに突っ込むらしい。
そもそもバイナリデータを突っ込めることを知らなかった…。
*参考記事*
iPhone SDK でUIImageの画像をSQLiteのDBに格納する方法
iPhoneSDKでSQLiteを使う方法
そもそもバイナリデータを突っ込めることを知らなかった…。
*参考記事*
iPhone SDK でUIImageの画像をSQLiteのDBに格納する方法
iPhoneSDKでSQLiteを使う方法
2010年11月24日水曜日
initのオーバーライド
TestView*view=[[TestView alloc]init]; TestViewController *VC = [[TestViewController alloc] initWithNibName: @"TestViewController" bundle:[NSBundle mainBundle]];UIView、xib付きUIViewControllerの初期化時にオーバライド(ロード)する場合は
以下をそれぞれのサブクラスに書く。※クラスにオーバロードのメソッド宣言すれば引数を渡す初期化も可能
*UIView
- (id)init { self = [super init]; if (self != nil) { NSLog(@"ここに初期化したい処理を追加する"); } return self; }
*xib付きUIViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:@"TestViewController" bundle:nibBundleOrNil]) { NSLog(@"ここに初期化したい処理を追加する"); } return self; }*Frame付き
- (id)initWithFrame:(CGRect)frame{ if ((self = [super initWithFrame:frame])) { NSLog(@"ここに初期化したい処理を追加する"); } return self; }
ナビゲーションバーに複数ボタンを配置する
InterfaceBuilderベースの場合は以下の前準備が必要
全部Xcode上でUIを生成してももちろんOK
*IBで下準備*
・カスタマイズしたいナビゲーションバーのあるxibを開く
・追加したいボタンをUIToolbarに乗せたものをview外に作る
※右寄、左寄の両方のボタンをカスタマイズしたい場合はUIToolbarを二つ作る
・UIToolbarの全体の大きさはボタンの数によって横幅を変更する
・作ったツールバーとナビゲーションバーを管理するクラスをIBOutletで繋ぐ
・ボタンのアクションがある場合は同クラスにIBActionを繋ぐ
*X-codeでカスタマイズしたツールバーを乗せる*
UINavigationControllerを管理するクラスのViewdidLoadで以下を呼び出す
※問題点
ナビゲーションでプロンプト表示した時にツールバーが
乗っていると背景でばれてしまう。
全部Xcode上でUIを生成してももちろんOK
*IBで下準備*
・カスタマイズしたいナビゲーションバーのあるxibを開く
・追加したいボタンをUIToolbarに乗せたものをview外に作る
※右寄、左寄の両方のボタンをカスタマイズしたい場合はUIToolbarを二つ作る
・UIToolbarの全体の大きさはボタンの数によって横幅を変更する
・作ったツールバーとナビゲーションバーを管理するクラスをIBOutletで繋ぐ
・ボタンのアクションがある場合は同クラスにIBActionを繋ぐ
*X-codeでカスタマイズしたツールバーを乗せる*
UINavigationControllerを管理するクラスのViewdidLoadで以下を呼び出す
//rightButtonsが右寄のボタンをまとめたUIToolBar //leftButtonsが左寄のボタンをまとめたUIToolBar -(void)createNaviButtons{ //ツールバーの背景色をナビバーと合わせる [rightButtons setTintColor: [self.navigationController.navigationBar tintColor]]; [leftButtons setTintColor: [self.navigationController.navigationBar tintColor]]; //カスタムビューを設定する self.navigationItem.leftBarButtonItem =[[[UIBarButtonItem alloc]initWithCustomView:leftButtons] autorelease]; self.navigationItem.rightBarButtonItem =[[[UIBarButtonItem alloc]initWithCustomView:rightButtons] autorelease]; }
※問題点
ナビゲーションでプロンプト表示した時にツールバーが
乗っていると背景でばれてしまう。
2010年11月11日木曜日
UIButtonの同時押し防止
マルチタップさせたくないボタンなどに
exclusiveTouchのプロパティを設定する
exclusiveTouch
UIViewのプロパティ。YESなら同ウインドウ内の他ビューにおける
タッチイベントを受け付けない。デフォルト:NO
exclusiveTouchのプロパティを設定する
exclusiveTouch
UIViewのプロパティ。YESなら同ウインドウ内の他ビューにおける
タッチイベントを受け付けない。デフォルト:NO
multitapcancelbtn.exclusiveTouch=YES;
2010年11月9日火曜日
UIScrollView 拡大率を変えずにフォーカス
[scrollView zoomToRect:CGRect]でズームフォーカス。
拡大率をかえたくない場合は以下。
*参考記事*
UIScrollViewで任意の位置にスクロール
拡大率をかえたくない場合は以下。
// 現在のスケール float scale = scrollV.zoomScale; // ズームスクロール CGRect rect = CGRectMake(0,0,10,10); [scrollV zoomToRect:rect animated:YES]; // スケールを再指定 [scrollV setZoomScale:scale];
*参考記事*
UIScrollViewで任意の位置にスクロール
性能測定を行うマクロ
hファイルに以下を定義
計測したい箇所に下記を記入。
コンソールにname部分に入れた名前で秒数が表示される。
シミュレータと実機で計測結果は異なるのでなるべく実機で計測する。
*参考記事*
Objective-Cでちょっとした性能測定を行うマクロ
#define BM_START(name) NSDate *name##_start = [NSDate new] #define BM_END(name) NSDate *name##_end = [NSDate new];\ NSLog(@"%s interval: %f", #name, [name##_end timeIntervalSinceDate:name##_start]);\ [name##_start release];[name##_end release]
計測したい箇所に下記を記入。
BM_START(name); /* 計測したい箇所 */ BM_END(name);
コンソールにname部分に入れた名前で秒数が表示される。
シミュレータと実機で計測結果は異なるのでなるべく実機で計測する。
*参考記事*
Objective-Cでちょっとした性能測定を行うマクロ
UIColorの便利な定義
hファイルで以下を定義するとrgbカラー指定が楽になる
使用例
*参考記事*
UIColor Macros
#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1] #define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
使用例
//色のみ testLabel.textColor = RGB(255, 251, 204); //透過も指定 testLabel2.textColor = RGBA(255, 251, 204, 0.5);
*参考記事*
UIColor Macros
typdef enum の使い方
hファイルのimport下に書く
enumを記述したクラスをインポートすれば数字の代わりに使える。
引数などに設定する場合は
typedef enum{ CASE_0=0, CASE_1, CASE_2 } TEST_ENUM;
enumを記述したクラスをインポートすれば数字の代わりに使える。
引数などに設定する場合は
-(void)test:(TEST_ENUM)case;
2010年10月28日木曜日
CGRect等のログ表示
//CGRect NSLog(@"%@",NSStringFromCGRect(testrect)); //CGSize NSLog(@"%@",NSStringFromCGSize(testsize)); //CGPoint NSLog(@"%@",NSStringFromCGPoint(testpoint));
2010年10月22日金曜日
UIScrollViewの初期化と設定
scrollRectToVisibleは下端が優先になる。上部起点で表示したい場合は
画面内に収まるCGRectを指定する。
※hファイルに<uiscrollviewdelegate>追加
画面内に収まる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];
あとで確かめてみます
CGPoint pp;
pp = CGPointMake(0,0);
[self.view.layer setAnchorPoint:pp];
UIButtonのタイトルを複数行にする
ボタンにlineBreakModeを無理矢理設定する。通常はラベルに使うプロパティ。
ただし2行以上の場合[Btn sizeToFit];をしても、横長になってしまうため
ボタンの大きさは自分で調整する必要がある。
※追記 若干修正とスクリーンショットを追加してみました。
↓↓↓ついでにボタンのプログラム生成手順も。↓↓↓↓
ただし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が無難かも…
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];
[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
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:@":"];
-(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
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/
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
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];
画像の左上からピクセル数を指定。
その大きさで四隅を切り取って、
その四隅の間を伸縮する。
※ストレッチさせる画像は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
>コンソールに詳しく止まった原因が出るらしい
>デバッガでブレークポイントが貼られ、停止するらしい
・実行可能ファイル→情報の引数タブ「環境に設定される変数」に
下の3つを追加
NSZombieEnabled → YES
NSDebugEnabled → YES
MallocStackLogging → YES
>コンソールに詳しく止まった原因が出るらしい
登録:
投稿 (Atom)