スライドショーのメソッド(1)

2010. 06. 11
基礎からのiPhone SDK 改訂版』の『スライドショーの作成』のメソッドを説明します。

今回のスライドショーで実装しているメソッドは5つあります。

1)animationImages(画像配列の生成メソッド)
2)awakeFromNib(初期化メソッド)
3)startStop:sender:(Start/Stopボタンのアクションメソッド)
4)changeDuration:sender:(速度切り替えバーのアクションメソッド)
5)changeOrder:sender:(モード変更ボタンのアクションメソッド)


●画像配列の生成メソッド

- (NSArray *)animationImages {
    // 画像リソースの読み込み
    UIImage *img1 = [UIImage imageNamed:@"photo08.jpg"];
    UIImage *img2 = [UIImage imageNamed:@"photo09.jpg"];
    UIImage *img3 = [UIImage imageNamed:@"photo10.jpg"];
    UIImage *img4 = [UIImage imageNamed:@"photo11.jpg"];
    UIImage *img5 = [UIImage imageNamed:@"photo12.jpg"];
    UIImage *img6 = [UIImage imageNamed:@"photo13.jpg"];
    UIImage *img7 = [UIImage imageNamed:@"photo14.jpg"];

    // 画像順の配列の生成
    NSMutableArray *imgs = [NSMutableArray arrayWithObjects:img1, img2, img3, img4, img5, img6, img7, nil];

    // 表示順が画像順かシャッフルか判定
    if (segShuffle.selectedSegmentIndex ==1) {
        int i;
        // 配列の個数を取得
        int count = [imgs count];
        // 現在の日時で乱数のシード値を変更
        srand([[NSDate date] timeIntervalSinceReferenceDate]);

        for (i = 0; i < 10; i++) {
            // 乱数の生成
            NSUInteger pos1 = rand() % count;
            NSUInteger pos2 = rand() % count;
            // 要素の入れ替え
            [imgs exchangeObjectAtIndex:pos1 withObjectAtIndex:pos2];
        }
    }
    // 配列を返す
    return(imgs);
}

※2010.6.12訂正
この生成メソッドanimationImagesと、UIImageViewクラスのanimationImagesプロパティは別物です。
(何故わざわざ既存のプロパティと同名のユーザメソッドにしたのか不明ですが)

内容としては、まずimageNamed:でスライドショーに使う画像7枚をオブジェクトにし、arrayWithObjects:で配列にします。

表示モードの判別は、セグメンテッドコントロールのアウトレットであるsegShuffleのインデックスを取得して行います。

※2010.6.12追記
selectedSegmentIndexプロパティの項目を追加しました。

シャッフルモードの場合は、疑似ランダム値を現在時刻を使ってランダム値を作っています。

疑似ランダム値をランダム値に近づけるために、C言語の標準ライブラリ関数のsrand関数(void srand(unsigned))を使い、引数に現在の時刻を渡してランダム値生成用のシード(種)を作ります。

そして、rand関数(int rand(void))でランダム値を2つ生成し、画像配列の要素数countで割って、剰余を求めることで0~(要素数-1)の値を得ます。

求めた2つのランダム値を使って、exchangeObjectAtIndex:withObjectAtIndex:メソッドで要素を入れ替えてシャッフルを実現しています。


・imageNamed:
(UIImageクラス)

+ (UIImage *)imageNamed:(NSString *)name

指定したファイル名に関連付けされた画像オブジェクトを返します。

指定したファイルの画像オブジェクト、またはメソッドが指定した画像が見つけられなかった場合はnilを返します。

このメソッドは、指定した名前の画像オブジェクトをシステムキャッシュの中から探し、存在するオブジェクトを返します。

一致する画像オブジェクトが既にキャッシュに存在しない場合、このメソッドは指定したファイルを画像データから読み込み、キャッシュして、結果のオブジェクトを返します。

name:拡張子を含むファイル名を指定します。
この画像を初めて読み込む場合、このメソッドはアプリケーションのメインバンドルから、指定した名前の画像を検索します。


・arrayWithObjects:
(NSArrayクラス)

+ (id)arrayWithObjects:(id)firstObj, ...

引数リストのオブジェクトを含む配列を生成して返します。

以下に3つの異なる型の要素を含む配列を生成するコードの例を示します。

NSArray *myArray;
NSDate *aDate = [NSDate distantFuture];
NSValue *aValue = [NSNumber numberWithInt:5];
NSString *aString = @"a string";

myArray = [NSArray arrayWithObjects:aDate, aValue, aString, nil];

firstObj, ...:コンマ区切りで、終端をnilにしたオブジェクトのリストを指定します。


・selectedSegmentIndex
(UISegmentedControlクラス)

@property(nonatomic) NSInteger selectedSegmentIndex

(最後にタッチして)選択したセグメントを識別するインデックス番号。

デフォルト値は、ユーザがセグメントをタッチするまで、UISegmentedControlNoSegment(セグメントを選択していない状態)になります。

-1を設定すると、現在の選択が解除されます。

UISegmentedControlのコントロールが瞬間的なモードの時、このプロパティは無視されます。

ユーザがセグメントをタッチして選択を変えると、コントロールイベントUIControlEventValueChangedを生成します。

セグメンテッドコントロールがこのコントロールイベントに応答するようにセットアップされている場合は、ターゲットにアクションメッセージが送られます。


・count
(NSArrayクラス)

- (NSUInteger)count

レシーバの現在のオブジェクト数を返します。


・date
(NSDateクラス)

+ (id)date

現在の日付と時間の新しい日付セットを生成して返します。

このメソッドはデフォルトの初期化メソッドとして、このクラスのinitを使用します。

以下にdateメソッドを使用した、現在時刻を取得するサンプルコードを示します。

NSDate *today = [NSDate date];


・timeIntervalSinceReferenceDate
(NSDateクラス)

- (NSTimeInterval)timeIntervalSinceReferenceDate

2001年1月1日 GMTからレシーバまでの経過秒数を返します。

レシーバとシステムの絶対参照日(2001年1月1日 GMT)の間隔を返します。

レシーバが絶対参照日以前の場合、戻り値は負になります。


・exchangeObjectAtIndex:withObjectAtIndex:
(NSMutableArrayクラス)

- (void)exchangeObjectAtIndex:(NSUInteger)idx1withObjectAtIndex:(NSUInteger)idx2

指定したインデックスで、レシーバのオブジェクトを交換します。

idx1:idx2で指定したオブジェクトと入れ替えるオブジェクトのインデックスを指定します。

idx2:idx1で指定したオブジェクトと入れ替えるオブジェクトのインデックスを指定します。



参考文献

UIImage Class Reference

NSArray Class Reference

UISegmentedControl Class Reference

NSDate Class Reference

NSMutableArray Class Reference

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

商品詳細を見る






QuietControl 30 wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
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 31 - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

QuietControl 30 wireless headphones
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