アフィン変換を使用したアニメーション

アフィン変換を使用してラベルをアニメーションさせるサンプルを作成しました。

今回は「CGAffineTransformMakeRotation」を使用し、ラベルの角度を変えながらアニメーションさせています。

下記よりサンプルをダウンロードできます。

サンプルダウンロード

ソースコード

ViewController.h

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

@interface ViewController : UIViewController

@property (strong, nonatomic) UILabel *label;
@property (strong, nonatomic) UIButton *button;

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

@interface ViewController ()

@end

@implementation ViewController

//ボタンの横幅
int _buttonWidth = 58;
//ボタンの縦幅
int _buttonHeight = 42;
//ボタンと画面端とのマージン
int _buttonMargin = 18;
//ラベルの横幅
int _labelWidth = 100;
//ラベルの縦幅
int _labelHeight = 40;
//ラベルの基点 (X座標)
int _labelBaseX = -40;
//ラベルの基点 (Y座標)
int _labelBaseY = 0;
//ラベルの目標値 (X座標)
int _labelAimX = 240;
//ラベルの目標値 (Y座標)
int _labelAimY = 320;
//アニメーション秒数
float animationDuration = 2.0f;

- (void)viewDidLoad
{
  [super viewDidLoad];
  //ボタン初期化
  [self initButton];
  //ラベル初期化
  [self initLabel];
}

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

//ボタン初期化
- (void)initButton
{
  //ボタンを角丸にする
  self.button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  //ボタンの座標と寸法を定義
  self.button.frame = CGRectMake(self.view.frame.size.width - _buttonWidth - _buttonMargin,
                                 self.view.frame.size.height - _buttonHeight - _buttonMargin,
                                 _buttonWidth,
                                 _buttonHeight);
  //ボタンのタイトル定義
  [self.button setTitle:@"Start"
               forState:UIControlStateNormal];
  [self.button sizeToFit];
  //ボタンをタップで startAnimationメソッドを呼び出し
  [self.button addTarget:self
                  action:@selector(startAnimation:)
        forControlEvents:UIControlEventTouchUpInside];
  //ステージに追加
  [self.view addSubview:self.button];
}

//ラベル初期化
- (void)initLabel
{
  //ラベルの座標と寸法を定義
  self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, _labelWidth, _labelHeight)];
  //ラベルの初期座標を定義
  self.label.center = CGPointMake(_labelBaseX, _labelBaseY);
  //ラベルテキストを代入
  self.label.text = @"Animation";
  //ラベルのテキストカラーを黒にする
  self.label.textColor = [UIColor blackColor];
  //ラベルをセンタリングする
  self.label.textAlignment = NSTextAlignmentCenter;
  //ラベルを viewに配置
  [self.view addSubview:self.label];
}

//アニメーション開始メソッド
- (void)startAnimation:(id)sender
{
  //アニメーション開始
  [UIView beginAnimations:nil context:nil];
  //指定した秒数でアニメーションする
  [UIView setAnimationDuration:animationDuration];
  //アニメーションの開始座標
  self.label.center = CGPointMake(_labelBaseX, _labelBaseY);
  //アニメーションの目標座標
  self.label.center = CGPointMake(_labelAimX, _labelAimY);
  //アフィン変換を使用してアニメーションさせる
  self.label.transform = CGAffineTransformMakeRotation(270 * M_PI/180);
  //アニメーション実行
  [UIView commitAnimations];
}

@end

お薦めの参考書


Cocos2d-xでゲームを開発したいという方に必携の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)