iPhone 温度計ゲーム

温度計の丸いところをこすると、おんどがドンドンあがっていき、放っておくとだんだん温度が下がってくる。という感じのシンプルなiPhoneゲームを作ってみます。

動作イメージ
XcodeからiOS6 iPhone Simulatorで動かすとこんな感じになります。

ポイント
丸いところにUIPanGestureRecognizerを設定すると、まるのViewから指が外れたときに止まってしまうので、ルートとなるViewのviewController.viewにジェスチャーを設定して、イベントの中で、指が丸いところの上にあるかどうかを判定するようにしました。

サンプルコード

#import “ViewController.h”

#import <QuartzCore/QuartzCore.h>

@interface ViewController () {

    float level;

    UIView *redBar;

    UIView *head;

    UILabel *number;

}

@end

@implementation ViewController

– (void)viewDidLoad

{

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor greenColor];

    [self createThermometer];

    [self showNumberLabel];

    [self setScratchGesture];

    [self start];

}

– (void)createThermometer

{

    UIView *bar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 400)];

    bar.center = CGPointMake(160, 250);

    bar.backgroundColor = [UIColor whiteColor];

    bar.layer.cornerRadius = 5;

    [self.view addSubview:bar];

    

    head = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

    head.backgroundColor = [UIColor whiteColor];

    head.layer.cornerRadius = 50;

    head.center = CGPointMake(160, 450);

    [self.view addSubview:head];

    

    UIView *redBall = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];

    redBall.backgroundColor = [UIColor redColor];

    redBall.layer.cornerRadius = 40;

    redBall.center = CGPointMake(50, 50);

    [head addSubview:redBall];

    

    redBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 10)];

    redBar.backgroundColor = [UIColor redColor];

    redBar.layer.anchorPoint = CGPointMake(0.5, 1.0);

    redBar.layer.position = CGPointMake(160, 450);

    [self.view addSubview:redBar];

    

    level = 10.0;

}

– (void)showNumberLabel

{

    number = [[UILabel alloc] init];

    number.font = [UIFont fontWithName:@”ChalkboardSE-Bold” size:30];

    number.text = @”10;

    number.textColor = [UIColor greenColor];

    number.layer.cornerRadius = 10;

    [number sizeToFit];

    number.center = CGPointMake(260, 450);

    [self.view addSubview:number];

}

– (void)setScratchGesture

{

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(scratch:)];

    [self.view addGestureRecognizer:pan];

}

– (void)scratch:(UIPanGestureRecognizer*)gr

{

    CGPoint p = [gr locationInView:self.view];

    if (CGRectContainsPoint(head.frame, p)) {

        level += 0.1;

    }

}

– (void)start

{

    [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 target:self selector:@selector(tick:) userInfo:nil repeats:YES];

}

– (void)tick:(NSTimer*)sender

{

    redBar.transform = CGAffineTransformMakeScale(1.0, level);

    number.text = [NSString stringWithFormat:@”%d, (int)level];

    if (level > 5) {

        level -= 0.03;

    }

}

– (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end