シンプルな記述でタイマーイベントを呼び出す「DCTimer」クラス

2種類のタイマーイベントをクラスメソッドで呼び出す「DCTimer」クラスを作成しました。userInfo経由でパラメータを渡す事も可能です。

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

ダウンロード

使用方法

一定間隔で実行するタイマーイベント呼び出し

1
2
//1秒間隔で timerEventメソッドを呼び出し
[DCTimer setTimer:1.0f delegate:self selector:@selector(timerEvent:) userInfo:nil];

指定した時間後に実行するタイマーイベント呼び出し

1
2
//2秒後に delayTimerEventメソッドを呼び出し
[DCTimer setDelayTimer:2.0f delegate:self selector:@selector(delayTimerEvent:) userInfo:nil];

サンプルソースコード

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
- (void)viewDidLoad
{
    [super viewDidLoad];

    //ラベル初期化
    self.timerLabel.text = NULL;
    self.delayTimerLabel.text = NULL;

    //タイマー呼び出し
    NSDictionary *timerUserInfo = [NSDictionary dictionaryWithObject:@"called telayTimer method" forKey:@"message"];
    [DCTimer setTimer:1.0f
             delegate:self
             selector:@selector(timerEvent:)
             userInfo:timerUserInfo];

    //遅延実行タイマー呼び出し
    NSDictionary *delayTimerUserInfo = [NSDictionary dictionaryWithObject:@"called setDelayTimer method" forKey:@"message"];
    [DCTimer setDelayTimer:2.0f
                  delegate:self
                  selector:@selector(delayTimerEvent:)
                  userInfo:delayTimerUserInfo];
}

//一定間隔に実行されるタイマーイベント
- (void)timerEvent:(NSTimer *)timer
{
    _timerCount++;
    NSString *message = [(NSDictionary *)timer.userInfo objectForKey:@"message"];
    self.timerLabel.text = [NSString stringWithFormat:@"%@: %d", message, _timerCount];
}

//一定時間後に実行されるタイマーイベント
- (void)delayTimerEvent:(NSTimer *)timer
{
    NSString *message = [(NSDictionary *)timer.userInfo objectForKey:@"message"];
    self.delayTimerLabel.text = message;
}

//タイマーの停止
- (IBAction)stopTimer:(id)sender
{
    [[DCTimer timer] invalidate];
}

ソースコード

DCTimer.h

1
2
3
4
5
6
7
8
9
10
11
#import <Foundation/Foundation.h>

@interface DCTimer : NSTimer

#pragma mark - public method
+ (void)setTimer:(CGFloat)timeInterval delegate:(id)delegate selector:(SEL)selector userInfo:(NSDictionary *)userInfo;
+ (void)clearTimer;
+ (void)setDelayTimer:(CGFloat)timeInterval delegate:(id)delegate selector:(SEL)selector userInfo:(NSDictionary *)userInfo;
+ (NSTimer *)timer;

@end

DCTimer.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
#import "DCTimer.h"

@implementation DCTimer

static NSTimer *timer;

// タイマー定義
+ (void)setTimer:(CGFloat)timeInterval delegate:(id)delegate selector:(SEL)selector userInfo:(NSDictionary *)userInfo
{
    timer = [NSTimer scheduledTimerWithTimeInterval:timeInterval
                                             target:delegate selector:selector userInfo:userInfo
                                            repeats:YES];
}

// タイマー削除
+ (void)clearTimer
{
    if (timer != nil) {
        [timer invalidate];
    }
}

// 遅延実行タイマー定義
+ (void)setDelayTimer:(CGFloat)timeInterval delegate:(id)delegate selector:(SEL)selector userInfo:(NSDictionary *)userInfo
{
    [NSTimer scheduledTimerWithTimeInterval:timeInterval
                                     target:delegate selector:selector userInfo:userInfo
                                    repeats:NO];
}

// タイマー取得
+ (NSTimer *)timer
{
    return timer;
}

@end

お薦めの参考書

Swiftではじめる iPhoneアプリ開発の教科書 Swift 2 & Xcode 7対応
この参考書の通りに実践サンプルを作成することで、確実に力を養うことができます。サンプルコードもサイトからダウンロード出来るようになっており、特に広告の貼り方などが参考になりました。Swiftで何が出来るかを知ることができ、入門用にお薦めの1冊です。

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

About

Masaki Hirokawa (@dolice_apps)

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

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • 綺麗な壁紙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)