スライドショーの簡易アニメーション(1)

2010. 06. 21
今度はステータスバーの透明化とツールバーの移動、ならびにトリプルタップ時のビューの回転機能のアニメーションをアプリケーションに追加します。


●フルスクリーン化時のステータスバーとツールバーのアニメーション

前述の通り、シングルタップした際のフルスクリーン化のON/OFF時に、

・ステータスバーの透明化
・(下方向へ画面外への)ツールバーの移動

の2つのアニメーション機能を、SlideクラスにenterOrExitFullScreenWithAnimationメソッドとして追加します。


●Slide.hヘッダファイルの編集

本書では触れられていませんが、Slide.hヘッダファイルにenterOrExitFullScreenWithAnimationの宣言するのを忘れないでください。
(太字が追加した部分)

#import <Foundation/Foundation.h>

@interface Slide : NSObject {

    // アウトレット
    IBOutlet UIImageView *imageSlide;    // 画像表示
    IBOutlet UIToolbar *toolbar;    // ツールバー
    IBOutlet UISlider *sliderDuration;    // 長さ変更
    IBOutlet UISegmentedControl *segShuffle;    //シャッフル
    IBOutlet UIButton *btnStartStop;    // 開始ボタン

}

// アクション
- (IBAction)startStop:(id)sender;    // スライドショーの開始停止
- (IBAction)changeOrder:(id)sender;    // スライドショーのシャッフル
- (IBAction)changeDuration:(id)sender;    // スライドショーの長さの変更

- (void)enterOrExitFullScreen;
- (void)enterOrExitFullScreenWithAnimation;

@end

439


●Slide.mソースファイルの編集

- (void)enterOrExitFullScreenWithAnimation {
    // ビューのアニメーションを有効化
    [UIView setAnimationsEnabled:YES];

    // アニメーション定義ブロックの開始
    [UIView beginAnimations:@"FullScreen" context:nil];

    // 現在のビューの中心位置を取得
    CGPoint center = toolbar.center;

    // 現在のビューの矩形と高さを取得
    CGRect frame = toolbar.frame;
    CGFloat height = CGRectGetHeight(frame);

    // 不透明の時は透明化して下に移動
    if (toolbar.alpha == 1.0f) {
        toolbar.alpha = 0.0f;
        center.y += height;
    }
    // 透明の時は不透明化して上に移動
    else {
        toolbar.alpha = 1.0f;
        center.y -= height;
    }

    // 中心位置を変更
    toolbar.center = center;

    // アニメーション実行
    [UIView commitAnimations];

    // ステータスバーのアニメーション
    UIApplication *app = [UIApplication sharedApplication];
    [app setStatusBarHidden:! app.statusBarHidden animated:YES];
}

440


・setAnimationsEnabled:
(UIViewクラス)

+ (void)setAnimationsEnabled:(BOOL)enabled

アニメーションを有効にするかどうかの設定をします。

アニメーションの属性を変更すると、アニメーションが無効になって無視されます。

デフォルトではアニメーションは有効になっています。

enabled:YESの場合はアニメーションは有効に、NOの場合は無効になります。


・beginAnimations:context:
(UIViewクラス)

+ (void)beginAnimations:(NSString *)animationID context:(void *)context

アニメーションブロックを開始します。

アニメーションブロック内でいくつかのプロパティ値を設定することにより、視覚的な変更をアニメーションすることができます。

アニメーションブロックはネスト(入れ子)にすることができます。

setAnimation~クラスメソッドが無い場合、アニメーションブロック内では何も呼び出しません。

アニメーションブロックは、beginAnimations:context:で開始され、commitAnimationクラスメソッドで終了します。

animationID:アニメーションデリゲートメッセージに渡すため、アプリケーションが供給するブロック内のアニメーションの識別子です。
セレクタの設定では、setAnimationWillStartSelector:とsetAnimationDidStopSelector:メソッドを使います。

context:アニメーションデリゲートメッセージに渡すため、アプリケーションが供給するブロック内の追加情報です。
セレクタの設定では、setAnimationWillStartSelector:とsetAnimationDidStopSelector:メソッドを使います。


・center
(UIViewクラス)

@property(nonatomic) CGPoint center

フレームの中心です。

スーパービューの座標系内の中央を指定します。

このプロパティの設定を変更すると、それに応じてframeプロパティの値が変わります。

フレーム矩形を変更すると、drawRect:メソッドの呼び出し無しにレシーバを自動的に再表示します。

フレーム矩形の変更時にdrawRect:メソッドを呼び出したい場合は、UIViewContentModeRedrawにcontentModeプロパティを設定してください。

このプロパティを変更して、アニメーションをすることができます。

アニメーションブロックで、開始にはbeginAnimations:context:クラスメソッド、終了にはcommitAnimationsクラスメソッドを使います。


・CGRectGetHeight
(CGGeometry)

CGFloat CGRectGetHeight (
    CGRect rect
);

矩形の高さを返します。

CGRectデータ構造体の格納している数値の正負に関わらず、この関数は標準かした矩形の高さを返します。

したがって、結果が負の数になることはありません。

rect:調べる矩形を指定します。


・alpha
(UIViewクラス)

@property(nonatomic) CGFloat alpha

レシーバのアルファ値です。

このプロパティを変更して、アニメーションをすることができます。

アニメーションブロックで、開始にはbeginAnimations:context:クラスメソッド、終了にはcommitAnimationsクラスメソッドを使います。


・commitAnimations
(UIViewクラス)

+ (void)commitAnimations

このアニメーションブロックが外側の時、アニメーションブロックの終了を示し、アニメーションを開始します。

現在のアニメーションブロックが外側のアニメーションブロックの場合、アプリケーションの実行ループに返される時にアニメーションが開始します。

アプリケーションはブロックされないため、アニメーションの実行は別のスレッドで行われます。

この場合、複数のアニメーションを互いの上に積み重ねることができます。

アニメーション開始の他の方法については、setAnimationBeginsFromCurrentState:を参照してください。


・setStatusBarHidden:animated:
(UIApplicationクラス)

- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated

ステータスバーの非表示または表示、任意で変化をアニメーションできます。
(このメソッドはiPhone OS 3.2では非推奨。iPhone OS 3.2では、代わりにsetStatusBarHidden:withAnimation:を使用してください。)

hiddenの値によって、インターフェイスの上部にステータスバーを外または中にフェードするアニメーションを行うことができます。

hidden:YESの場合はステータスバーを非表示に、NOの場合は表示になります。
デフォルト値はNOになります。

animated:YESの場合は非表示状態からアニメーションで変化し、NOではアニメーションしません。


●CGGeometry

CGGeometryリファレンスは、幾何学的な原型とその操作を行う構造体を定義します。

CGPointデータ構造体は、二次元座標系の点を表します。

CGRectデータ構造体は、矩形の位置と大きさを表します。

CGSizeデータ構造体は、幅と高さの大きさを表します。

CGRectデータ構造体に格納される高さと幅は、負の値でも格納できます。

例えば、矩形の原点が (0.0 , 0.0) でサイズが (10.0 , 10.0) のものと、矩形の原点が (10.0 , 10.0) でサイズが (-10.0 , -10.0) のものは全く同一になります。

アプリケーションはCGRectStandardize関数を呼び出して、矩形を標準化する(格納している高さと幅を正の値にする)ことができます。

このリファレンスで述べている全ての関数は、CGRectデータ構造体で入力された場合には暗黙的に標準化してから矩形の計算を行います。

その理由は、CGRectデータ構造体に格納されているデータの読み書きを、アプリケーションが直接行うことを避けるためです。

代わりにここでは、矩形の操作とその特質を取得する関数の使い方を表します。



参考文献

UIView Class Reference

CGGeometry Reference

UIApplication Class Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






SoundLink Mini Bluetooth speaker_ii_limited
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
05 | 2017/06 | 07
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

SoundLink Mini Bluetooth speaker_ii_limited
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