通常ベースとなるビューにサブビューを追加するには、通常addSubviewを用います。しかし、iボタンの下などに追加する必要がある場合は、inserSubviewを使います。insertSubviewの追加のパラメータには、atIndex(階層を指定),aboveSubview(当該ビューの上)、belowSubview(当該ビューの下)があるようです。
その他にビューの交換(exchangeSubviewAtIndex)などもあります。
2010年5月8日土曜日
2010年5月7日金曜日
2010年5月5日水曜日
画像のアニメーションの方法
画像のアニメーションを設定するには、「アニメーションブロック」を宣言するそうです。
[UIView beginAnimations:@"View Flip(任意 or nill)" context:nill];
[UIView setAnimationDuration:1.25(秒)];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOur];
//4パターンあり。UIViewを参照
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:self.view cash:YES];
//4パターンあり。UIViewを参照
[view2object viewWillAppear:YES];
[view1object viewWillDisappaer:YES];
[view1object.view removeFromSuperview];
[self.view insertSubview: view2.view atIndex:0];
[view1object viewDidDisapper:YES];
[view2object viewDidAppear:YES];
[UIView commitAnimation]
//本ではAppearとDisapperで指定するオブジェクト逆になっていましたが、どうなんでしょう........(逆にしても何も変わらない.......)
[UIView beginAnimations:@"View Flip(任意 or nill)" context:nill];
[UIView setAnimationDuration:1.25(秒)];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOur];
//4パターンあり。UIViewを参照
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight
forView:self.view cash:YES];
//4パターンあり。UIViewを参照
[view2object viewWillAppear:YES];
[view1object viewWillDisappaer:YES];
[view1object.view removeFromSuperview];
[self.view insertSubview: view2.view atIndex:0];
[view1object viewDidDisapper:YES];
[view2object viewDidAppear:YES];
[UIView commitAnimation]
//本ではAppearとDisapperで指定するオブジェクト逆になっていましたが、どうなんでしょう........(逆にしても何も変わらない.......)
lazy loading(遅延読み込み)
マルチビューのルートコントローラのコーディング時は、リソースを極力使用しないように、切り替え時に個別のビューのリリースと生成を行うのが一般的で、これをlazy loadingと呼ぶようです。
この実装のためには、
-(void)viewDidLaoadをオーバーライドし、
オブジェクトをnib指定(initWithNibname)で生成(alloc)し、
selfの当該オブジェクトに代入
self.viewで初期画面を表示
-(void)switchviews:(id)senderで
view1が表示対象であることを、self.view1.view.superview == nilで判定します(view1がまだ組み込まれていないため、親のビューを持たない)。YESなら、もしインスタンスが生成されていなければ生成し、View2をremoveFromSuperviewし、self.viewにinsertSubviewします(at Index:0 最下層)。
view2が表示対象ならば(else)、逆をします。
-(void)didReceiveMemoryWarningで、該当オブジェクトviewのsuperviewがnilでなければ該当viewをnilし、画面から消し、メモリも解放します。いままで-(void)viewDidUnloadでまとめてnilしていましたが、マルチビューの場合こちらで解放するようです(難しい・・・)。
この実装のためには、
-(void)viewDidLaoadをオーバーライドし、
オブジェクトをnib指定(initWithNibname)で生成(alloc)し、
selfの当該オブジェクトに代入
self.viewで初期画面を表示
-(void)switchviews:(id)senderで
view1が表示対象であることを、self.view1.view.superview == nilで判定します(view1がまだ組み込まれていないため、親のビューを持たない)。YESなら、もしインスタンスが生成されていなければ生成し、View2をremoveFromSuperviewし、self.viewにinsertSubviewします(at Index:0 最下層)。
view2が表示対象ならば(else)、逆をします。
-(void)didReceiveMemoryWarningで、該当オブジェクトviewのsuperviewがnilでなければ該当viewをnilし、画面から消し、メモリも解放します。いままで-(void)viewDidUnloadでまとめてnilしていましたが、マルチビューの場合こちらで解放するようです(難しい・・・)。
Interface Builderの基本操作
いまさらですが、Interface Builderを含めた基本操作についてです。
基本として以下の操作とするようです。
1. ヘッダファイルにアクション(ビュー→コントローラ)及びアウトレット(コントローラ→ビュー)を記載する。
2. APPデリゲートのアウトレットとしてサブビューを追加した場合は、Interface Builderで当該nibにコントローラクラスを指定した上で、APPデリゲート→サブビューコントローラのnibへアウトレットを接続する。
3. Interface Builderで、該当するビューからコントローラのnibへアクションを、コントローラのnibからビューへアウトレットを接続する。
4. 実装ファイル(*.m)でインスタンスを実装する。
基本として以下の操作とするようです。
1. ヘッダファイルにアクション(ビュー→コントローラ)及びアウトレット(コントローラ→ビュー)を記載する。
2. APPデリゲートのアウトレットとしてサブビューを追加した場合は、Interface Builderで当該nibにコントローラクラスを指定した上で、APPデリゲート→サブビューコントローラのnibへアウトレットを接続する。
3. Interface Builderで、該当するビューからコントローラのnibへアクションを、コントローラのnibからビューへアウトレットを接続する。
4. 実装ファイル(*.m)でインスタンスを実装する。
UIWindow
UIWindow
クラスは windowsとして知られたオブジェクトであり、スクリーンに表示されるwindowsアプリケーションを管理、調整する。イベントと表示が主な機能であり、ビュー階層のルートとなる。iPhoneアプリケーションでは一つのwindowしかない。
ウィンドウを構成する
windowLevel
propertyscreen
property
ウィンドウキーを作成する
座標を変換する
イベントを送る
@class (クラスの宣言)
@class宣言は、当該クラスの親クラス以外のクラスを宣言する際に、ヘッダを明示的にインポートしない場合に使用するそうです。
実装例では、ヘッダファイルで@class宣言を、実装ファイルで#inportをしているようです。
実装例では、ヘッダファイルで@class宣言を、実装ファイルで#inportをしているようです。
2010年5月4日火曜日
2つのビューによる回転のサポート
2つのビューを使った回転時の表示サポートを勉強してみました。
表示にあたり、self.view.transformとあるのは(UIView)self.viewのプロパティで、オブジェクトのサイズ、位置、角度を変えるための構造体のようです。
CG系の機能はまだ概念すらつかめていません。
しかも、各向きをサポートすると、初期のviewアウトレットも向きに合わせて設定すべきかと思いますが、工夫して実装しないと固定のようです(Files'Ornerのviewアウトレットの指定のみではだめ)。
回転系の機能はちょっと後回しですね......
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if(toInterfaceOrientation == UIInterfaceOrientationPortrait){
self.view =self.portrait;
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0));
self.view.bounds = CGRectMake(0.0, 0.0, 300.0, 480.0);
}
else if(...
}
}
2010年5月3日月曜日
Interface Builderの照会機能
Interface Buiderのエディタは、Objective-Cやライブラリ等の機能を照会するのに便利な機能を備えます。
入力中に「ESC」キーを押すと、選択肢が表示されるため、先頭の言葉がわかるだけで選択肢から簡単に入力ができます。
また、Optionキーを押しながら該当用語をダブルクリックすると、説明用のウィンドウが表示され、さらに上の右から2番目のアイコンをクリックすると、該当リファレンスが表示されます。めちゃくちゃ便利です。
viewDidUnloadメソッドとdeallocメソッド
ビューのコントローラを構成する際のメモリ管理として、viewDidUnloadメソッドとdeallocメソッドでアウトレットでretainしたインスタンスの解放に関する実装が不可欠です。
deallocの場合、releaseですが、viewDidUnloadの場合、nilを設定するそうです。
------------- sample code ------------------
- (void)viewDidUnload {
deallocの場合、releaseですが、viewDidUnloadの場合、nilを設定するそうです。
------------- sample code ------------------
@synthesize nameField;
@synthesize numberField;
@synthesize sliderLabel;
@synthesize leftSwitch;
@synthesize rightSwitch;
@synthesize doSomethingButton;
- (void)viewDidUnload {
self.nameField = nil;
self.numberField = nil;
self.sliderLabel = nil;
self.leftSwitch = nil;
self.rightSwitch = nil;
self.doSomethingButton = nil;
[super viewDidUnload];
}
- (void)dealloc {
[nameField release];
[numberField release];
[sliderLabel release];
[leftSwitch release];
[rightSwitch release];
[doSomethingButton release];
[super dealloc];
}
------------------------------
UIImage(イメージクラス)
UIImageクラスは、以下の機能を持ちます。
キャッシュされたイメージをロードする処理
+ imageNamed:
新規イメージを生成する
イメージの属性
キャッシュされたイメージをロードする処理
+ imageNamed:
新規イメージを生成する
- + imageWithContentsOfFile:
+ imageWithData:
+ imageWithCGImage:
– stretchableImageWithLeftCapWidth:topCapHeight:
イメージを拡大/縮小したりサイズを変更する際にキャップとして指定されたエリアは拡大/縮小されない。このテクニックは幅を変更可能なボタンとして良く
使用され、同じ曲率のコーナを保持し、中心が伸びる/縮めることが必要な場合に使用する。leftCapWidth
左端(leftCap)として指定する値。イメージを水平にのばしたくない時は
0
を指定する。topCapHeight
上端(topCap)として指定する値。 イメージを垂直にのばしたくない時は
0
を指定する。ReturnValue
端の値を反映した新しいイメージオブジェクト
イメージの属性
imageOrientation
propertysize
propertyCGImage
propertyleftCapWidth
propertytopCapHeight
property
UIAleartView
アラートビューを生成する
– initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:
ex.
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Row Selected!"
message:message
delegate:nil
cancelButtonTitle:@"Yes I Did"
otherButtonTitles:nil];
[alert show];[message release];
[alert release];
ボタンを構成する
– addButtonWithTitle:
numberOfButtons
property– buttonTitleAtIndex:
cancelButtonIndex
propertyfirstOtherButtonIndex
property
終了する
2010年5月2日日曜日
UIActionSheetDelegate プロトコル
UIActionSheetDelegate
プロトコルは、実装すべきUIActionSheet のデリゲートのメソッドを定義します。 デリゲートには、ボタンのアクションとその他のカスタマイズする振る舞いを実装します。このプロトコルに定義されるいくつかのメソッドはオプションです。もし、固有のボタンやカスタマイズされた振る舞いを加えた場合、交換するデリゲートメッセージをハンドリングするため、このプロトコルに合うように、デリゲートを実装します。アクションシートオブジェクトの
delegate
プロパティは、アプリケーションオブジェクトの一つをデリゲートとして指定します。もし、アクションシートに固有のボタンを加えた場合、それらのボタンがクリックされたときの応答のため、デリゲートは
actionSheet:clickedButtonAtIndex:
メッセージを実装しなくてはなりません。もしくは、カスタマイズするボタンを無くすかです。 actionSheet:clickedButtonAtIndex:
デリゲートメソッドが起動された後、アクションシートは自動的に終了します。オプションとして、 システムがアクションシートをキャンセルした時に適切な動作をとらせるために、
actionSheetCancel:
メソッドを実装することができます。もし、デリゲートがこのメソッドを実装しなかった場合、デフォルトの振る舞いはキャンセルボタンの押下をシミュレートし、ビューを閉じます。また、“Customizing Behavior.”にあるメソッドを使用することで、アクションシートの表示と終了の振る舞いののオプションを増やすことができます。
◆アクションへ応答する
◆振る舞いをカスタマイズする– willPresentActionSheet:
– didPresentActionSheet:
– actionSheet:willDismissWithButtonIndex:
– actionSheet:didDismissWithButtonIndex:
- このメソッドは、アニメーションが終了し、ビューが隠れてから呼び出される。
- ・actionSheet
- 終了したアクションシート
- ・buttonIndex
- クリックされたボタンのインデックス。
0
から始まる。もしこれがキャンセルボタンのインデックスの場合、アクションシートはキャンセルされる。もし-1
の場合、キャンセルボタンのインデックスはセットされない。
UIViewController(ビューコントローラ クラス)
UIViewControllerクラスは、コントロールを記述するクラスの親クラスとなります。
ビューレイアウトの振る舞いを構成する
関係するその他のビューコントローラを取得する
nibファイルを使用するビューコントローラを生成する
– initWithNibName:bundle:
nibName
propertynibBundle
property
view
property- コントローラが管理するビューを示す。このプロパティには、ビューコントローラのview階層のルートビューを代表するビューがストアされる。 スクリーン内のどこにビューコントローラを表示させようが(モーダルビューであってもビューコントローラをベースとした一部であっても)、このビューはアプリケーションウィンドウ内で取得され表示される。 デフォルト値は
nil
. - もしこのプロパティにアクセスし、値が
nil
,の場合、ビューコントローラは自動的にloadView
メソッドを呼び出し、結果としてviewを返す。デフォルトのloadView
メソッドは、どのようなビューコントローラであっても、関連するnibファイルからviewを読み出そうと試みる。もしviewコントローラが関連するビューコントローラを持たない場合、,loadView
メソッドをオーバライドし、ルートビューとサブビューを生成するために使用しなくてはならない。それぞれのビューコントローラオブジェクトは、そのビューの基本的なオーナ(soul owner)となる。複数のビューコントローラオブジェクトで同じビューオブジェクトを関連づけてはならない。なぜなら、このプロパティにアクセスすることにより、自動的にビューをロードし起動することができるため、もしビューがメモリ内にあると、isViewLoaded
プロパティを使用することができるためである。このプロパティとは異なり、isViewLoaded
プロパティは、ビューがメモリにないとビューのロードを強制できない。UIViewController
クラスは、メモリが少ない環境でウィンドウがリリースされると、自動的にこのプロパティがnilとなる。 – loadView
– viewDidLoad
- コントローラのビューがメモリにロードされたあとコールされる。
– viewDidUnload
– isViewLoaded
title
propertycontentSizeForViewInPopover
propertymodalInPopover
property
ビューレイアウトの振る舞いを構成する
wantsFullScreenLayout
property
interfaceOrientation
property– shouldAutorotateToInterfaceOrientation:interfaceOrientation
デバイスの回転時に、新しいデバイスの向きが、ビューコントローラが対応する向きであるかを2値(Boolean)で返す。
interfaceOrientation
- 回転させたあとのユーザインターフェイスの向き。取り得る値は
UIInterfaceOrientationに示される。
UIInterfaceOrientationPortrait:デバイスがポートレート(縦)モードになっており、ホームボタンが下になって立てられている状態
UIInterfaceOrientationPortraitUpsideDown:デバイスがポートレート(縦)モードになっているが、上下逆になっており、ホームボタンが上になって立てられている状態
UIInterfaceOrientationLandscapeLeft:デバイスがランドスケープ(横)モードになっており、ホームボタンが左側で立てられている状態
UIInterfaceOrientationLandscapeRight:デバイスがランドスケープ(横)モードになっており、ホームボタンが右側で立てられている状態
- Return Value
もし、ビューコントローラが指定された向きに自動的に回転するときはYES
そうでないときはNO
.デフォルトでは, このメソッドはUIInterfaceOrientationPortraitの向きでのみ
YES
を返す。もしビューコントローラが追加の向きをサポートする場合は、オーバライドしサポートする全ての向きでYES
を返す。このメソッドの実装は、interfaceOrientation パラメータにある値に基づきYES
またはNO
を返す。interfaceOrientation
プロパティの値を得たり、UIDevice
クラスにより向きの値をチェックしたりしないこと。ビューコントローラは与えられた向きをサポート機能があるかないかである。– rotatingHeaderView
– rotatingFooterView
ビューローテーションイベントへ応答する
ビューが縦置き以外をサポートする場合かつInterface Builderのサイズインスペクタ以上の機能が必要な場合に使用する。
– willRotateToInterfaceOrientation:duration:
ユーザインタフェースが回転する直前にビューコントローラに通知する。回転より優先した緊急の追加アクションを実行させる場合に使用する。例えばビューの動作やメディアの再生を停止したり、負荷の高い描画や更新を一時的に無効にしたり、現在のビューと新しい向きを反映したビューとを入れ替えることにも使用できる。
– willAnimateRotationToInterfaceOrientation:duration:
1ステップのユーザインターフェイスの回転が実施される前にビューコントローラに通知する。ズームレベル、スクローラ位置、およびビューのその他の属性(位置等)を調整するには、このメソッドを実装します。
– didRotateFromInterfaceOrientation:
– willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
– didAnimateFirstHalfOfRotationToInterfaceOrientation:
– willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
関係するその他のビューコントローラを取得する
parentViewController
propertysearchDisplayController
propertysplitViewController
propertymodalViewController
propertynavigationController
propertytabBarController
property
– presentModalViewController:animated:
– dismissModalViewControllerAnimated:
modalTransitionStyle
propertymodalPresentationStyle
property
navigationItem
propertyediting
property– setEditing:animated:
– editButtonItem
hidesBottomBarWhenPushed
property
– setToolbarItems:animated:
toolbarItems
property
tabBarItem
property
登録:
投稿 (Atom)