温度計の丸いところをこすると、おんどがドンドンあがっていき、放っておくとだんだん温度が下がってくる。という感じのシンプルな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