fc2ブログ

スライドショーの簡易アニメーション(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)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る

Calendar
05 | 2010/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
Wish List
iOS/iPadOS Devices
Twine
Twine Reference
1. 序章
2. はじめに
2.1. Twineのインストール
2.2. 基本コンセプト
2.3. Twineを使いこなす
2.4. Twineのアップデート
2.5. Twineのアンインストール
2.6. Twineの古いバージョンを使う
3. ストーリーライブラリを使う
3.1. ストーリーの表示
3.2. ストーリーの作成、コピー、インポート
3.3. ストーリーの編集
3.4. ストーリー名の変更
3.5. ストーリーのアーカイブとエクスポート
3.6. ストーリーの削除
3.7. ストーリーへのタグ付け
3.8. ライブラリの場所を変更する
4. ストーリーの編集
4.1. ストーリーマップのナビゲーション
4.2. 取り消しとやり直し
4.3. パッセージの選択と移動
4.4. パッセージの編集
4.5. パッセージのリンク
4.6. パッセージの削除
4.7. パッセージのタグ付け
4.8. テキストの検索と置換
4.9. ストーリー名の変更
4.10. ストーリーフォーマットの変更
4.11. ストーリーの統計の表示
4.12. ストーリーのJavaScriptとCSSを編集する
5. 作品の公開出力
5.1. ストーリーのテスト
5.2. ストーリーの校正
5.3. ストーリーのプレイ
5.4. ストーリーの公開出力
5.5. スクラッチフォルダ
6. ストーリーフォーマットの管理
6.1. ストーリーフォーマットの表示
6.2. デフォルトのストーリーフォーマットの変更
6.3. 校正フォーマットの変更
6.4. ストーリーフォーマットの追加
6.5. ストーリーフォーマットの削除
6.6. ストーリーフォーマットの拡張機能を無効にする
6.7. Twineがストーリーフォーマットのバージョンを管理する方法
7. Twineのカスタマイズ
7.1. 環境設定の設定
7.2. コマンドラインスイッチ
7.3. 高度なカスタマイズ
8. 制限事項
8.1. 大きなストーリー
8.2. ストーリーの組み合わせ
8.3. ストーリーの共同編集
8.4. 画像とマルチメディアの使用
8.5. ソースコントロールでの作業
9. 問題のトラブルシューティング
9.1. バックアップ
9.2. ローカルストレージの直接表示
9.3. 編集中にエラーメッセージが表示される場合
9.4. Twineが起動しない場合
9.5. Twineがあなたのストーリーを失ったら
9.6. ストーリーが破損している場合
9.7. Twineの外観に不具合がある場合
10. リリースノート
10.1. バージョン 2.8
10.2. バージョン 2.7
10.3. バージョン 2.6
10.4. バージョン 2.5
10.5. バージョン 2.4
10.6. バージョン 2.3
10.7. バージョン 2.2
10.8. バージョン 2.1
10.9. バージョン 2.0
10.10. バージョン 1.0
10.11. Tweebox バージョン

Twine Cookbook
詳解Swift
詳解Swift第5版(01)〜Swiftでプログラミング
詳解Swift第5版(02)〜関数
詳解Swift第5版(03)〜構造体
詳解Swift第5版(04)〜オプショナル
詳解Swift第5版(05)〜プロトコル
詳解Swift第5版(06)〜基本的なデータ型
詳解Swift第5版(07)〜パターン
詳解Swift第5版(08)〜クラスと継承
詳解Swift第5版(09)〜メモリ管理
詳解Swift第5版(10)〜拡張
詳解Swift第5版(11)〜エラー処理
詳解Swift第5版(12)〜クロージャ
詳解Swift第5版(13)〜ジェネリクス
詳解Swift第5版(14)〜メモリへのアクセスとポインタ
詳解Swift第5版(15)〜カスタム属性とDSL記法
詳解Swift第5版(16)〜GUI との連携

詳解Swift第4版(01)〜Swiftでプログラミング
詳解Swift第4版(02)〜関数
詳解Swift第4版(03)〜構造体
詳解Swift第4版(06)〜基本的なデータ型
詳解Swift第4版(07)〜パターン
詳解Swift第4版(08)〜クラスと継承
詳解Swift第4版(09)〜メモリ管理
詳解Swift第4版(10)〜拡張
詳解Swift第4版(11)〜エラー処理
詳解Swift第4版(12)〜クロージャ
詳解Swift第4版(13)〜ジェネリクス

詳解Swift第3版(01)〜Swiftでプログラミング
詳解Swift第3版(02)〜関数
詳解Swift第3版(03)〜構造体
詳解Swift第3版(05)〜基本的なデータ型
詳解Swift第3版(06)〜パターン
詳解Swift第3版(07)〜演算子
詳解Swift第3版(08)〜クラスと継承
詳解Swift第3版(09)〜メモリ管理
詳解Swift第3版(10)〜プロトコル
詳解Swift第3版(11)〜拡張
詳解Swift第3版(12)〜エラー処理
詳解Swift第3版(13)〜クロージャ
詳解Swift第3版(14)〜ジェネリクス

詳解Swift改訂版(01)〜Swiftでプログラミング
詳解Swift改訂版(02)〜関数
詳解Swift改訂版(03)〜構造体
詳解Swift改訂版(04)〜オプショナル
詳解Swift改訂版(05)〜基本的なデータ型
詳解Swift改訂版(06)〜パターン
詳解Swift改訂版(07)〜演算子
詳解Swift改訂版(08)〜クラスと継承
詳解Swift改訂版(09)〜メモリ管理
詳解Swift改訂版(10)〜プロトコル
詳解Swift改訂版(11)〜拡張
詳解Swift改訂版(12)〜エラー処理
詳解Swift改訂版(13)〜クロージャ
詳解Swift改訂版(14)〜ジェネリクス

詳解Swift(1)〜Swiftでプログラミング
詳解Swift(2)〜関数
詳解Swift(3)〜構造体
詳解Swift(4)〜オプショナル
詳解Swift(5)〜基本的なデータ型
詳解Swift(6)〜パターン
詳解Swift(7)〜演算子
詳解Swift(8)〜クラスと継承
詳解Swift(9)〜メモリ管理
詳解Swift(10)〜プロトコル
詳解Swift(11)〜拡張
詳解Swift(12)〜クロージャ
詳解Swift(13)〜ジェネリクス
詳解Swift(14)〜C/Objective-Cとのデータ受け渡し
Swift
Site Map
Apple Music


Categories
Tips
ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
QR Code
QR
Profile

水月杏香

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

Visitors