
わっかを適当な角度まで書くツールっぽいiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
@interface ViewController ()
// [circleA, angleA, circleB, angleB, …]
@property (nonatomic, strong) NSMutableArray *circleArray;
@property (nonatomic, weak) UIButton *selectedCircle;
@property (nonatomic, weak) UISlider *slider;
@end
@implementation ViewController
– (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
self.circleArray = [NSMutableArray array];
[self createCircle];
[self createButton];
[self createSlider];
}
– (void)createCircle
{
for (int i=0; i<5; i++) {
float angle = 0.1*M_PI;
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointZero radius:i * 20 + 30 startAngle:0 endAngle:angle clockwise:YES];
CAShapeLayer *l = [CAShapeLayer layer];
l.path = path.CGPath;
l.strokeColor = [UIColor colorWithHue:0.1 * i + 0.1 saturation:0.8 brightness:1 alpha:1].CGColor;
l.fillColor = [UIColor clearColor].CGColor;
l.lineWidth = 20;
l.position = CGPointMake(160, 200);
[self.view.layer addSublayer:l];
[self.circleArray addObject:l];
[self.circleArray addObject:@(angle)];
}
}
– (void)createButton
{
for (int i=0; i<5; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.tag = i;
[btn setBackgroundImage:[self imageWithColor:[UIColor lightGrayColor]] forState:UIControlStateNormal];
[btn setBackgroundImage:[self imageWithColor:[UIColor darkGrayColor]] forState:UIControlStateSelected];
[btn setTitle:[NSString stringWithFormat:@”%d”, i + 1] forState:UIControlStateNormal];
btn.frame = CGRectMake(i * 60 + 20, 400, 40, 40);
btn.layer.cornerRadius = 20;
btn.layer.masksToBounds = YES;
[self.view addSubview:btn];
[btn addTarget:self action:@selector(buttonTouch:) forControlEvents:UIControlEventTouchUpInside];
}
}
– (void)buttonTouch:(UIButton *)sender
{
if (self.selectedCircle)
self.selectedCircle.selected = NO;
sender.selected = YES;
self.selectedCircle = sender;
// set circle angle
self.slider.value = [self.circleArray[sender.tag * 2 + 1] floatValue];
}
– (void)createSlider
{
UISlider *slider = [[UISlider alloc] init];
slider.frame = CGRectMake(0, 0, 260, 30);
slider.center = CGPointMake(160, 350);
slider.minimumValue = 0;
slider.maximumValue = 2.0 * M_PI;
[self.view addSubview:slider];
self.slider = slider;
[slider addTarget:self action:@selector(slide:) forControlEvents:UIControlEventValueChanged];
}
– (void)slide:(UISlider *)sender
{
int num = self.selectedCircle.tag;
CAShapeLayer *circle = self.circleArray[num * 2];
circle.path = [UIBezierPath bezierPathWithArcCenter:CGPointZero radius:num * 20 + 30 startAngle:0 endAngle:sender.value clockwise:YES].CGPath;
// update
self.circleArray[num * 2 + 1] = @(sender.value);
}
-(UIImage *)imageWithColor:(UIColor *)color
{
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end