加速度センサーのサンプル

iOSの加速度センサーからデバイスの傾きや向きを取得するサンプルを作成しました。

主な機能は下記の通りです。

主な機能

  1. X方向の傾き表示
  2. Y方向の傾き表示
  3. Z方向の傾き表示
  4. デバイスの向きを表示

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

サンプルダウンロード

ソースコード

ViewController.h

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

@interface ViewController : UIViewController <UIAccelerometerDelegate> {
    UILabel*   _label;
    float      _aX;
    float      _aY;
    float      _aZ;
    NSString*  _orientation;
}

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

#define FILTERING_FACTOR 0.1

@interface ViewController ()

@end

@implementation ViewController

//初期化
- (void)viewDidLoad
{
    [super viewDidLoad];

    //ラベルの生成
    _label = [self makeLabel:CGPointMake(0, 0)
                        text:@"Accelerometer"
                        font:[UIFont systemFontOfSize:16]];
    [self.view addSubview:_label];

    //値の初期化
    _aX = 0;
    _aY = 0;
    _aZ = 0;
    _orientation = @"";

    //加速度通知の開始
    UIAccelerometer *accelermeter = [UIAccelerometer sharedAccelerometer];
    accelermeter.updateInterval = 0.1f;
    accelermeter.delegate = self;

    //端末回転通知の開始
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didRotate:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];
}

//ラベルのリサイズ
- (void)resizeLabel:(UILabel *)label
{
    CGRect frame = label.frame;
    frame.size = [label.text sizeWithFont:label.font
                        constrainedToSize:CGSizeMake(512, 512)
                            lineBreakMode:NSLineBreakByWordWrapping];
    [label setFrame:frame];
}

//ラベルの生成
- (UILabel *)makeLabel:(CGPoint)pos
                 text:(NSString *)text
                 font:(UIFont *)font
{
    UILabel *label = [[UILabel alloc] init];
    [label setText:text];
    [label setFont:font];
    [label setTextColor:[UIColor blackColor]];
    [label setBackgroundColor:[UIColor clearColor]];
    [label setTextAlignment:NSTextAlignmentLeft];
    [label setNumberOfLines:0];
    [label setLineBreakMode:NSLineBreakByWordWrapping];
    [self resizeLabel:label];
    return label;
}

//端末の向きの取得
- (void)didRotate:(NSNotification *)notification
{
    UIDeviceOrientation orientation = [[notification object] orientation];
    if (orientation == UIDeviceOrientationLandscapeLeft) {
        _orientation = @"横(左90度回転)";
    } else if (orientation == UIDeviceOrientationLandscapeRight) {
        _orientation = @"横(右90度回転)";
    } else if (orientation==UIDeviceOrientationPortraitUpsideDown) {
        _orientation = @"縦(上下逆)";
    } else if (orientation == UIDeviceOrientationPortrait) {
        _orientation = @"縦";
    } else if (orientation == UIDeviceOrientationFaceUp) {
        _orientation = @"画面が上向き";
    } else if (orientation == UIDeviceOrientationFaceDown) {
        _orientation = @"画面が下向き";
    }
}

//加速度通知時に呼ばれる
- (void)accelerometer:(UIAccelerometer *)accelerometer
        didAccelerate:(UIAcceleration *)acceleration
{
    //加速度にローパスフィルタをあてる
    _aX = (acceleration.x * FILTERING_FACTOR) + (_aX * (1.0 - FILTERING_FACTOR));
    _aY = (acceleration.y * FILTERING_FACTOR) + (_aY * (1.0 - FILTERING_FACTOR));
    _aZ = (acceleration.z * FILTERING_FACTOR) + (_aZ * (1.0 - FILTERING_FACTOR));

    //ラベルの更新
    NSMutableString *str = [NSMutableString string];
    [str appendString:@"Accelerometer\n\n"];
    [str appendFormat:@"X軸加速度: %+.2f\n", _aX];
    [str appendFormat:@"Y軸加速度: %+.2f\n", _aY];
    [str appendFormat:@"Z軸加速度: %+.2f\n\n", _aZ];
    [str appendFormat:@"端末の向き: %@", _orientation];
    [_label setText:str];
    [self resizeLabel:_label];
}

@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(無料)
  • 綺麗な壁紙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)