横に細いボタンをたくさん並べて指をスライドさせるiPhoneアプリのサンプルコードを描いてみます。
#import “ViewController.h”
@interface ViewController ()
@property (nonatomic, weak) UIButton *selected;
@end
@implementation ViewController
– (void)viewDidLoad
{
[super viewDidLoad];
[self createButtons];
}
– (void)createButtons
{
for (int i=0; i<32; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.tag = 1;
btn.frame = CGRectMake(i * 10, CGRectGetMaxY(self.view.frame) – 80, 9.5, 80);
float hue = (i % 5) * 0.2;
[btn setBackgroundColor:[UIColor colorWithHue:hue saturation:0.7 brightness:0.9 alpha:1]];
[btn addTarget:self action:@selector(tap:) forControlEvents:UIControlEventTouchUpInside];
btn.userInteractionEnabled = NO;
[self.view addSubview:btn];
}
}
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint p = [[touches anyObject] locationInView:self.view];
[self.view.subviews enumerateObjectsUsingBlock:^(UIView *v, NSUInteger idx, BOOL *stop) {
if (self.selected) {
self.selected.transform = CGAffineTransformIdentity;
self.selected.userInteractionEnabled = NO;
self.selected.tag = 1;
}
if (v.tag == 1 && CGRectContainsPoint(v.frame, p)) {
self.selected = (UIButton *)v;
self.selected.userInteractionEnabled = YES;
self.selected.transform = CGAffineTransformMakeScale(5.0, 5.0);
self.selected.tag = 2;
[self.view insertSubview:self.selected atIndex:0];
}
}];
}
– (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint p = [[touches anyObject] locationInView:self.view];
[self.view.subviews enumerateObjectsUsingBlock:^(UIView *v, NSUInteger idx, BOOL *stop) {
if (v.tag == 1 && CGRectContainsPoint(v.frame, p)) {
if (self.selected != v) {
self.selected.transform = CGAffineTransformIdentity;
self.selected.userInteractionEnabled = NO;
self.selected.tag = 1;
self.selected = (UIButton *)v;
self.selected.userInteractionEnabled = YES;
self.selected.transform = CGAffineTransformMakeScale(5.0, 5.0);
self.selected.tag = 2;
[self.view insertSubview:self.selected atIndex:0];
}
}
}];
}
– (void)tap:(UIButton *)sender
{
[UIView animateWithDuration:0.5 animations:^{
sender.alpha = 0.5;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.5 animations:^{
sender.alpha = 1.0;
}];
self.view.backgroundColor = [sender.backgroundColor colorWithAlphaComponent:0.5];
}];
}
– (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end