#import "btnsView.h"
@interface btnsView ()
// 存放被选中的按钮
@property(nonatomic, strong) NSMutableArray *secBtns;
@property(nonatomic, assign) CGPoint point;
@end
@implementation btnsView
- (NSMutableArray *)secBtns
{
if (_secBtns == nil) {
NSMutableArray *arrayM = [NSMutableArray array];
_secBtns = arrayM;
}
return _secBtns;
}
- (void)awakeFromNib
{// 添加按钮
[self setUp];
// 给btns添加拖动手势
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[self addGestureRecognizer:panGestureRecognizer];
}
// 拖动手势业务逻辑
- (void)pan:(UIPanGestureRecognizer *)pan
{
// 获取当前点
if (pan.state == UIGestureRecognizerStateChanged) {
CGPoint panP = [pan locationInView:pan.view];
self.point = panP;
for (int i = 0; i < self.subviews.count; i++) {
UIButton *btn = self.subviews[i];
if (CGRectContainsPoint(btn.frame,panP) && btn.selected == NO) {
btn.selected = YES;
[self.secBtns addObject:btn];
}
[self setNeedsDisplay];
}
}
}
// 绘制路径
- (void)drawRect:(CGRect)rect {
if (self.secBtns.count) {
UIBezierPath *path = [UIBezierPath bezierPath];
for (int i = 0; i < self.secBtns.count; i++) {
UIButton *btn = self.secBtns[i];
if (i == 0) {
[path moveToPoint:btn.center];
}else
{
[path addLineToPoint:btn.center];
}
}
[path addLineToPoint:self.point];
[[UIColor redColor] set];
[path setLineJoinStyle:kCGLineJoinRound];
[path setLineCapStyle:kCGLineCapRound];
[path setLineWidth:10];
[path stroke];
}
}
// 添加按钮
- (void)setUp
{
// 添加按钮
for (int i = 0; i<9; i++) {
UIButton *btn = [[UIButton alloc] init];
btn.userInteractionEnabled = NO;
// 确定按钮的大小尺寸
CGFloat btnWH = 74;
// 计算列数和行数
CGFloat col = i%3;
CGFloat row = i/3;
// 计算间隙
CGFloat space = (self.bounds.size.width - 3*btnWH)/4;
CGFloat btnX = space + col *(btnWH + space);
CGFloat btnY = space + row *(btnWH + space);
// 确定按钮的frame
btn.frame = CGRectMake(btnX, btnY, btnWH, btnWH);
// 设置按钮图片
[btn setImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];
// 添加按钮到btnsView中
[self addSubview:btn];
}
}
@end