スマッシュを作ってみた(1)

2010. 02. 23
引き続き『iPhone SDKの教科書』のスマッシュを作ってみました。
例によってフォロー分のみ記述します。

●ステータスバーの消去

『UIStatusBarHidden』というRaw Keyは『Status bar is initially hidden』になります。

●scheduledTimerWithTimeInterval

NSTimerクラスのクラスメソッドの1つで、新規にNSTimerオブジェクトを作り、一定時間間隔でメソッドを返します。

scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
(NSTimeInterval)secondsタイマーの時間間隔を秒単位で指定します。
0秒以下の場合、0.1ミリ秒に補正されます。 
(id)targetタイマー作動時に呼び出すインスタンスオブジェクトを指定します。
(SEL)aSelectorタイマー作動時のNSTimerを引数とするメソッドを指定します。
(id)userInfoメソッドを呼び出す際に渡す情報。渡す情報が無い場合はnil。
(BOOL)repeatsYESならタイマー動作を繰り返します。
NOなら一度の呼び出しで終了します。

SelectorやuserInfoは調べたけどよく分からないので保留。

●UFO(Round Rect Button)の座標

UFOはRound Rect Buttonで作られており、UIButtonクラスのインスタンス変数targetとして宣言されています。

このUIButtonクラスは、NSObject→UIResponder→UIView→UIControl→UIButtonと継承されています。

表示位置の設定はUIViewクラスで行われており、これが本文中の『すべてのビューアイテムはcenterプロパティで表示位置を設定できる』の意味に繋がります。

UIView.h内でCGPoint型のプロパティとして宣言されています。

@property(nonatomic) CGPoint    center;    // center is center of frame. animatable

CGPointはCGFloat型というFloat型の値を持った、二次元座標を示す構造体です。

疑似ランダム値を得るrand関数(int rand(void))は、stdlib.hで宣言されているC言語の標準ライブラリ関数です。

疑似ランダム値をランダム値に近づけるために、同ライブラリのsrand関数(void srand(unsigned))を使い、引数にtime関数で現在時間を渡しています。

time関数(time_t time(time_t *))は、time.hで宣言されているC言語の標準ライブラリ関数で、グリニッチ標準時1970年1月1日00:00:00からの経過秒数を返します。

●UIViewを使ったアニメーション

UIViewクラスには簡易アニメーション機能が有り、beginAnimations:context:メソッドの呼び出しで始まり、commitAnimationsメソッドの呼び出しで終了します。

両メソッドの間にアニメーション効果を記述すると、commitAnimationsメソッドの呼び出しで効果が実行されます。

(void)beginAnimations:
(NSString *)animationID
 context:(void *)context
アニメーションの設定を開始します。
animationIDは複数のアニメーションがある場合の識別子
です。 
(void)commitAnimations:アニメーションの設定を終了し実行します。
(void)setAnimationStartDate:
(NSDate *)startTime 
commitAnimationsメソッドから戻った後、次にアニメー
ションを開始する日時を指定します。
開始時刻はCFAbsoluteTimeGetCurrentで得られます。
デフォルトでは即時実行されます。 
(void)setAnimationsEnabled:
(BOOL)enabled 
アニメーションの有効/無効を設定します。
デフォルトは有効です。 
(void)setAnimationDelegate:
(id)delegate 
デリゲートを割り当て、アニメーションの開始時と終了
時に追加タスクを実行できます。
デフォルトはnilです。
(void)setAnimationWillStartSelector:
(SEL)selector 
アニメーション開始時にメッセージを受信するセレクタ
を指定します。
(void)setAnimationDidStopSelector:
(SEL)selector 
アニメーション終了時にメッセージを受信するセレクタ
を指定します。
(void)setAnimationDuration:
(NSTimeInterval)duration 
アニメーションの実行時間を秒単位で指定します。
デフォルトは0.2秒です。 
(void)setAnimationDelay:
(NSTimeInterval)delay
commitAnimationsメソッドから戻った後、次にアニメー
ションを開始するまでの待機時間を指定します。
デフォルトは0.0秒です。 
(void)setAnimationCurve:
(UIViewAnimarionCurve)curve
アニメーション効果の遷移速度を設定できます。 
遷移速度の指定はUIViewAnimationCurveで行います。 
(void)setAnimationRepeatCount:
(float)repeatCount 
アニメーションの繰り返し回数を設定します。
デフォルトは繰り返ししません。 
(void)setAnimationRepeatAutoreverses:
(BOOL)repeatAutoreverses 
アニメーションが設定値に達した際に巻き戻すかどうか
を設定します。
デフォルトはNOです。 
(void)setAnimationBeginsFromCurrentState:
(BOOL)fromCurrentState 
YESの場合アニメーションを開始し、NOなら何もしま
せん。
デフォルトはNOです。 
(void)setAnimationTransition:
(UIViewAnimationTransition)transition
 forView:(UIView *)view
 cache:(BOOL)cache
viewに対してtransitionでアニメーションの遷移方法を
指定します。 
cacheがYESの場合遷移する画像をキャッシュするため
描画が速くなり、NOの場合アニメーション速度が低下
します。 
(BOOL)areAnimationsEnabledアニメーションが有効ならYES、無効ならNOを返しま
す。 

UIViewAnimationCurveには4種類あります。

UIViewAnimationCurveEaseInOutゆっくり始まって徐々に加速し、中盤から減速する
UIViewAnimationCurveEaseInゆっくり始まり、徐々に加速します
UIViewAnimationCurveEaseOut速く始まり、徐々に原則します
UIViewAnimationCurveLinear等速度で進行します

本書ではデフォルトがUIViewAnimationCurveLinearとなっていますが、『UIView Class Reference』ではUIViewAnimationCurveEaseInOutになっています。

UIViewAnimationTransitionには5種類有り、アニメーションの遷移方法を指定します。

UIViewAnimationTransitionNone指定無し
UIViewAnimationTransitionFlipFromLeft中央の垂直軸中心に右回転で遷移
UIViewAnimationTransitionFlipFromRight中央の垂直軸中心に左回転で遷移
UIViewAnimationTransitionCurlUp下から上にカールして遷移
UIViewAnimationTransitionCurlDown上から下にカールして遷移

●リトルエンディアンとビッグエンディアン

エンディアンとは、2バイト以上のデータをメモリに格納したり、データ転送する際の方式のことで、バイトオーダーとも呼ばれます。

2バイト以上のデータの場合、1バイト毎に格納または転送するのですが、この際に下位アドレスから拾うのがリトルエンディアン、上位アドレスから拾うのがビッグエンディアンです。

元データ0x0123456789ABCDEF
リトルエンディアン
EFCDAB8967452301
ビッグエンディアン
0123456789ABCDEF

エンディアンの違いは、メモリ格納の場合はCPUに依存し、OSは無関係です。

初期のMac(所謂『68k Mac』)に搭載していたMotorolaのMC68000系はビッグエンディアン。

主にPowerMacに搭載していたIBM/MotorolaのPowerPC系はG5を除きバイエンディアン(両対応)でしたが、68k CPUとの互換性やG5がビッグエンディアンであることからビッグエンディアンで動かしていたと思われます。

それだけに、リトルエンディアンであるIntelの80x86系への以降は当時話題になりました。

iPhone/iPod touchが採用しているARM系はバイエンディアンなのですが、リトルエンディアンで動いていると思われます(未確認。CFByteOrderGetCurrentで分かるという話もあります)。



参考文献

NSTimer Class Reference

UIButton Class Reference

CGGeometry Reference

UIView Class Reference

初心者のためのポイント学習C言語/ライブラリ関数一覧

iOSアプリケーションプログラミングガイド

福井高専IT研究会OfficialWiki

iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩
(2009/03/18)
赤松 正行

商品詳細を見る






Bose QuietComfort 20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
08 | 2017/09 | 10
Sun Mon Tue Wed Thu Fri Sat
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose QuietComfort 20
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR