丸テーブルの上に、カラーボールをおいてから
GOボタンを押してみよう!
くるくる、くるくる〜。どんな形がみえるかな?
という感じの子供向けiPhoneアプリのサンプルコード書いてみた。

ポイント
カラーボールを丸テーブルごと回すために、
丸テーブルのxy座標に変換してから、
テーブルのsubviewとしてAddしています。

環境
今回つくったiPhoneアプリサンプルは、
XcodeのiOS6 iPhone Simulatorで動かしています。

iPhone kids game sample

サンプルコード


#import “ViewController.h”

#import <QuartzCore/QuartzCore.h>

#define UIColorHex(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

@interface ViewController () {

    UIView *table;

    int counter;

}

@end

@implementation ViewController

– (void)viewDidLoad

{

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];

    [self createTable];

    

    [self createUI];

}

– (void)createUI

{

    NSArray *colors = [NSArray arrayWithObjects:UIColorHex(0xD91A60),UIColorHex(0x3A1053),UIColorHex(0x4B71BF),UIColorHex(0x32A67B),UIColorHex(0x294190), nil];

    

    for (int i=0; i<10; i++) {

        int colorIndex = i % 5;

        UIColor *color = [colors objectAtIndex:colorIndex];

        

        float x = (i % 5) * 40 + 10;

        float y = (i / 5) * 40 + 380;

        UIView *item = [[UIView alloc] initWithFrame:CGRectMake(x, y, 30, 30)];

        item.backgroundColor = color;

        item.layer.cornerRadius = 15;

        [self.view addSubview:item];

        

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

        [item addGestureRecognizer:pan];

    }

    

    UILabel *start = [[UILabel alloc] init];

    start.font = [UIFont boldSystemFontOfSize:40];

    start.text = @”GO”;

    start.textColor = [UIColor whiteColor];

    [start sizeToFit];

    start.center = CGPointMake(280, 420);

    start.backgroundColor = [UIColor blackColor];

    start.layer.cornerRadius = 5;

    start.userInteractionEnabled = YES;

    [self.view addSubview:start];

    

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(go)];

    [start addGestureRecognizer:tap];

}

– (void)pan:(UIPanGestureRecognizer*)gr

{

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

    gr.view.center = p;

    

    if (gr.state == UIGestureRecognizerStateEnded) {

        CGPoint pt = [table convertPoint:p fromView:self.view];

        if ([table hitTest:pt withEvent:nil]) {

            gr.view.center = pt;

            [table addSubview:gr.view];

        }

    }

}

– (void)createTable

{

    table = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];

    table.backgroundColor = [UIColor whiteColor];

    table.layer.cornerRadius = 150;

    table.layer.shadowOffset = CGSizeMake(0,0);

    table.layer.shadowOpacity = 1;

    table.layer.shadowRadius = 2;

    table.layer.shadowColor = [UIColor blackColor].CGColor;

    table.center = CGPointMake(160, 180);

    [self.view addSubview:table];

}

– (void)go

{

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

}

– (void)tick:(NSTimer*)sender

{

    if (counter > 300) {

        counter = 0;

        [sender invalidate];

    }

    

    float d = counter * M_PI / 1000.0;

    table.transform = CGAffineTransformRotate(table.transform, d);

    counter++;

}

– (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end