UIViewにアニメーションを適用する方法

Objective-Cで UIViewにアニメーション指定し実行するサンプルを以下に作成しました。

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

サンプルダウンロード

アニメーションの種類

UIViewAnimationTransition 説明
UIViewAnimationTransitionFlipFromLeft 左から回転し裏返るアニメーション
UIViewAnimationTransitionCurlDown 下から捲れるアニメーション

ソースコード

ViewController.h

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

#define ANIMATION_FLIP_FROM_LEFT UIViewAnimationTransitionFlipFromLeft
#define ANIMATION_CURL_DOWN      UIViewAnimationTransitionCurlDown
#define ANIMATION_DURATION       0.75f
#define FRONT_IMAGE              @"Hesychasm_640_1136.jpg"
#define BACK_IMAGE               @"Echidna_640_1136.jpg"

@interface ViewController : UIViewController

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

#pragma mark start implementation for methods

@implementation ViewController

typedef enum transitions : NSUInteger {
    viewForTransition = 1
} transitions;

- (void)viewDidLoad
{
    [super viewDidLoad];

    //次のビューをセット
    [self.view addSubview:[self nextView]];
}

#pragma mark responder

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    //アニメーション実行中であれば処理しない
    if (![UIView areAnimationsEnabled]) {
        [self.nextResponder touchesEnded:touches withEvent:event];
        return;
    }
    static UIViewAnimationTransition transition = ANIMATION_FLIP_FROM_LEFT;

    //次のビューをセット
    UIView *nextView = [self nextView];

    //アニメーション定義
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:)];
    [UIView setAnimationDuration:ANIMATION_DURATION];
    [UIView setAnimationTransition:transition forView:self.view cache:YES];

    //ビューの入れ替え
    [[self.view viewWithTag:viewForTransition] removeFromSuperview];
    [self.view addSubview:nextView];

    //アニメーション実行
    [UIView commitAnimations];

    //アニメーションを無効にする
    [UIView setAnimationsEnabled:NO];

    //次に実行されるアニメーションの種類変更
    if (ANIMATION_CURL_DOWN < ++transition) {
        transition = ANIMATION_FLIP_FROM_LEFT;
    }
}

#pragma mark private methods

- (UIView *)nextView
{
    //表か裏の画像を指定
    static BOOL isFront = YES;
    UIImage *image = [UIImage imageNamed:isFront ? FRONT_IMAGE : BACK_IMAGE];
    isFront = !isFront;

    //ビューに画像をセット
    UIView *view = [[UIImageView alloc] initWithImage:image];
    view.tag = viewForTransition;
    view.frame = self.view.bounds;
    view.autoresizingMask =
        UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    view.contentMode = UIViewContentModeScaleAspectFill;
    return view;
}

- (void)animationDidStop:(id)selector
{
    //アニメーションを有効にする
    [UIView setAnimationsEnabled:YES];
}

@end

お薦めの参考書

Cocos2d-xスマートフォン2Dゲーム開発講座 Cocos2d-x 3対応
Cocos2d-xを利用したスマートフォン向け3Dゲーム開発の手法を、サンプルを基に作りながら学ぶ事ができます。実際に遊べるゲームサンプルが4種収録されており、iOS / Android両対応のゲームを開発したい方には必見の一冊になっています。

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

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)