画像のスライドショーテンプレート

Objective-Cで画像をスライドショー表示するテンプレートを作成しました。タイマーで一定秒数が経過する毎に新しい画像をフェードインしています。

下記よりサンプルのダウンロードが行えます。

サンプルダウンロード

ソースコード

ViewController.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) UIImageView *imageView;
@property (nonatomic) NSMutableArray *slideShowImages;
@property (nonatomic) int slideShowImageNum;
@property (nonatomic) NSTimer *slideShowTimer;
@property (nonatomic) float slideShowTimerInterval;
@property (nonatomic) float slideShowFadeInDuration;
@property (nonatomic) int currentImageIndex;
@property (nonatomic) int imageWidth;
@property (nonatomic) int imageHeight;
@property (nonatomic) BOOL isRunningSlideShow;

@end

ViewController.m

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
  [super viewDidLoad];
  //スライドショーの設定
  [self initSlideShowImages];
  //スライドショーで表示する画像を初期化
  [self initSlideShowImageView];
  //スライドショー開始
  [self startSlideShow];
}

- (void)didReceiveMemoryWarning
{
  [super didReceiveMemoryWarning];
}

//スライドショーで表示するイメージを初期化
- (void)initSlideShowImages
{
  //スライドショーで使用する画像タイトル定義
  self.slideShowImages = [NSArray arrayWithObjects:
                          @"Pandora",
                          @"Rain",
                          @"Echidna",
                          @"Heimatlos",
                          @"Hesychasm",
                          @"Asymmetry",
                          @"Loki",
                          @"El",
                          @"Frigg",
                          @"Beelzebub",
                          @"Hirume",
                          @"Hera",
                          @"Nyx",
                          @"Maldoror",
                          @"7thVision",
                          @"MariaMagdalena",
                          @"Sarah",
                          @"AngelsBone",
                          @"Isthar",
                          @"Lilit",
                          @"Icon",
                          @"cintaamaNicakra",
                          @"samanta-bhadra",
                          nil];
  //総画像ファイル数を取得
  self.slideShowImageNum = [self.slideShowImages count] - 1;
  //最初に表示する画像IDを設定
  self.currentImageIndex = 0;
  //スライドが切り替わる秒数を設定
  self.slideShowTimerInterval = 5.0f;
  //フェードイン秒数
  self.slideShowFadeInDuration = 0.3;
  //画像の横幅
  self.imageWidth = 320;
  //画像の縦幅
  self.imageHeight = 568;
}

//スライドショーで表示するイメージを配置
- (void)initSlideShowImageView
{
  //UIImageViewを初期化
  self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.imageWidth, self.imageHeight)];
  //UIImageViewに画像を表示
  self.imageView.image = [self getUIImageFromResources:[self.slideShowImages objectAtIndex:self.currentImageIndex] ext:@"jpg"];
  //UIImageViewを UIViewに乗せる
  UIView *slideShowView = [[UIView alloc] init];
  slideShowView = self.imageView;
  //ステージに配置
  [self.view addSubview:slideShowView];
}

//スライドショーを開始する
- (void)startSlideShow
{
  //既にスライドショーが再生中であれば実行しない
  if (self.isRunningSlideShow) {
    return;
  }
  //最後の画像になったらIDをリセットする
  if ([self isLastImage]) {
    self.currentImageIndex = -1;
  }
  //スライドショーのタイマー定義
  self.slideShowTimer = [NSTimer scheduledTimerWithTimeInterval:self.slideShowTimerInterval
                                                         target:self
                                                       selector:@selector(nextSlideShow:)
                                                       userInfo:nil
                                                        repeats:YES];
  //スライドショー再生中フラグ
  self.isRunningSlideShow = YES;
}

//スライドショーで次の写真を表示する
- (void)nextSlideShow:(NSTimer*)timer
{
  //最後の画像になったらIDをリセットする
  if ([self isLastImage]) {
    self.currentImageIndex = -1;
  }
  //次の画像を表示
  [self changeToNextImage];
}

//次の画像へ切り替える
- (void)changeToNextImage
{
  //画像IDを送る
  self.currentImageIndex++;
  //画像ファイル名をセット
  NSString *imageTitle = [NSString stringWithFormat:@"%@", [self.slideShowImages objectAtIndex:self.currentImageIndex]];
  self.imageView.image = [self getUIImageFromResources:imageTitle ext:@"jpg"];
  //フェードイン開始
  _imageView.alpha = 0;
  [UIView beginAnimations:@"fadeIn" context:nil];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
  [UIView setAnimationDuration:self.slideShowFadeInDuration];
  _imageView.alpha = 1;
  [UIView commitAnimations];
}

//スライドショーを停止する
- (void)stopSlideShow
{
  [self.slideShowTimer invalidate];
  self.isRunningSlideShow = NO;
}

//スライドショーイベントの呼び出し
- (void)callSlideShow
{
  if (self.isRunningSlideShow) {
    [self stopSlideShow];
  } else {
    [self startSlideShow];
  }
  self.isRunningSlideShow = !self.isRunningSlideShow;
}

//最後のイメージであるか
- (BOOL)isLastImage
{
  return (self.slideShowImageNum <= self.currentImageIndex);
}

//画像ファイルを取得
- (UIImage *)getUIImageFromResources:(NSString*)fileName ext:(NSString*)ext
{
  NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:ext];
  UIImage *img = [[UIImage alloc] initWithContentsOfFile:path];
  return img;
}

スライドショーイベントの呼び出し

再生ボタンで制御する場合は、以下のメソッドをイベントとして呼ぶ事で動作します。

1
2
3
4
5
6
7
8
9
- (void)callSlideShow
{
  if (self.isRunningSlideShow) {
    [self stopSlideShow];
  } else {
    [self startSlideShow];
  }
  self.isRunningSlideShow = !self.isRunningSlideShow;
}

関連記事

お薦めの参考書

Swiftポケットリファレンス
Swiftの基本的な使い方から、データ処理やネットワーク処理の応用まで、逆引き形式で調べられる良書です。サンプルコードも Webからダウンロード出来、とても便利です。内容としては中級者向けですが、手元にあれば安心の一冊です。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • アート壁紙HD(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)