カメレオンのマークを、
あか、みどり、あお、きいろ
4つのパネルの上にのせてみよう!
カメレオンの色がかわるかも!!
という感じのiPhone子供アプリのサンプルを作ってみた。
ポイント
UIColorからred, green, blueの値を取得して、
タイマーのなかで、のせたパネルの色に変化させてます。
白色は、[UIColor white] で指定すると、
red, green, blueの値が取れないので、下記を使用してます。
( colorWithRed:1 green:1 blue:1 )
サンプルコード
#import “ViewController.h”
#import <QuartzCore/QuartzCore.h>
@interface ViewController () {
UIView *chameleon;
UIColor *fromColor, *toColor;
int counter;
}
@end
@implementation ViewController
– (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
[self createColorTile];
[self createChameleon];
}
– (void)createColorTile
{
UIView *red = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)];
red.backgroundColor = [UIColor redColor];
[self.view addSubview:red];
UIView *green = [[UIView alloc] initWithFrame:CGRectMake(200, 10, 100, 100)];
green.backgroundColor = [UIColor greenColor];
[self.view addSubview:green];
UIView *blue = [[UIView alloc] initWithFrame:CGRectMake(10, 150, 100, 100)];
blue.backgroundColor = [UIColor blueColor];
[self.view addSubview:blue];
UIView *yellow = [[UIView alloc] initWithFrame:CGRectMake(200, 150, 100, 100)];
yellow.backgroundColor = [UIColor yellowColor];
[self.view addSubview:yellow];
}
– (void)createChameleon
{
UIImage *image = [UIImage imageNamed:@”chameleon”];
chameleon = [[UIImageView alloc] initWithImage:image];
chameleon.frame = CGRectMake(130, 400, 60, 60);
chameleon.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
chameleon.layer.cornerRadius = 30;
chameleon.userInteractionEnabled = YES;
[self.view addSubview:chameleon];
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[chameleon addGestureRecognizer:pan];
}
– (void)pan:(UIPanGestureRecognizer*)gr
{
CGPoint p = [gr locationInView:self.view];
if (gr.state == UIGestureRecognizerStateEnded) {
gr.view.userInteractionEnabled = NO;
UIView *v = [self.view hitTest:p withEvent:nil];
gr.view.userInteractionEnabled = YES;
toColor = v.backgroundColor;
fromColor = chameleon.backgroundColor;
counter = 0;
[NSTimer scheduledTimerWithTimeInterval:1.0/60.0 target:self selector:@selector(changeColor:) userInfo:nil repeats:YES];
}
gr.view.center = p;
}
– (void)changeColor:(NSTimer*)sender {
float redTo = 0.0, greenTo = 0.0, blueTo = 0.0;
[toColor getRed:&redTo green:&greenTo blue:&blueTo alpha:nil];
float redFrom=0.0, greenFrom=0.0, blueFrom=0.0;
[fromColor getRed:&redFrom green:&greenFrom blue:&blueFrom alpha:nil];
float d = 100.0;
float dRed = (redTo – redFrom) / d;
float dGreen = (greenTo – greenFrom) / d;
float dBlue = (blueTo – blueFrom) / d;
float red=0.0, green=0.0, blue=0.0;
[chameleon.backgroundColor getRed:&red green:&green blue:&blue alpha:nil];
chameleon.backgroundColor = [UIColor colorWithRed:red + dRed green:green + dGreen blue:blue + dBlue alpha:1.0];
if (counter == d) {
[sender invalidate];
}
counter++;
}
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end