NSTimerを使用したアニメーション

Objective-Cのタイマーを使用してラベルをアニメーションさせるサンプルを以下に作成しました。

サンプルでは、一定間隔でラベルの座標を更新する事でアニメーションを実装しています。

サンプルダウンロード

ソースコード

ViewController.h

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

@interface ViewController : UIViewController

@property (nonatomic) int labelWidth;
@property (nonatomic) int labelHeight;
@property (nonatomic) int animationSpeedX;
@property (nonatomic) int animationSpeedY;
@property (strong, nonatomic) UILabel* myLabel;

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

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
  [super viewDidLoad];
  //アニメーションさせるラベル初期化
  [self initLabel];
  //アニメーション設定
  [self setAnimationSettings];
  //タイマー定義
  [self setTimer];
}

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

//ラベル初期化
- (void)initLabel
{
  //ラベルを生成
  self.labelWidth = 128;
  self.labelHeight = 32;
  self.myLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.labelWidth, self.labelHeight)];
  self.myLabel.text = @"Animation";
  [self.view addSubview:self.myLabel];
}

//アニメーション設定
- (void)setAnimationSettings
{
  //ラベルのアニメーションスピード
  self.animationSpeedX = 2;
  self.animationSpeedY = 1;
}

//タイマー定義
- (void)setTimer
{
  //0.01秒毎に moveLabelセレクタを呼ぶ
  [NSTimer
   scheduledTimerWithTimeInterval:0.01
   target:self
   selector:@selector(moveLabel:)
   userInfo:nil
   repeats:YES];
}

//ラベルをアニメーションさせるセレクタ
- (void)moveLabel:(NSTimer *)timer {
  float posX = self.myLabel.center.x;
  float posY = self.myLabel.center.y;
  //ラベルを移動させる
  posX += self.animationSpeedX;
  posY += self.animationSpeedY;
  //端までアニメーションしたか判定
  if ([self isLimitLabelX:posX]) posX = 0;
  if ([self isLimitLabelY:posY]) posY = 0;
  //座標反映
  self.myLabel.center = CGPointMake(posX, posY);
}

//横方向の端まで行ったか判定
- (BOOL)isLimitLabelX:(int)posX
{
  return (self.view.frame.size.width + self.labelWidth < posX);
}

//縦方向の端まで行ったか判定
- (BOOL)isLimitLabelY:(int)posY
{
  return (self.view.frame.size.height + self.labelHeight < posY);
}

@end

関連記事

お薦めの参考書


Cocos2d-xでゲームを開発したいという方に必携の1冊です。実際にゲームを作りながら学習して行く内容で、とても身に付き易い構成になっています。プログラミング経験はあるけれどゲーム開発は未経験という方にお薦めの内容となっております。

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)