#import "ViewController.h"
typedef NS_ENUM(NSUInteger, FrameType) {
FrameTypeFirst,
FrameTypeRight,
FrameTypeDown,
FrameTypeLeft,
FrameTypeUp
};
@interface ViewController ()
@property(nonatomic,strong)NSMutableArray *arrView;
/// 转圈圈下标
@property(nonatomic,assign)NSInteger index;
/// 获奖下标
@property(nonatomic,assign)NSInteger jiangLiIndex;
/// 模拟转圈圈的圈数
@property(nonatomic,assign)NSInteger quanShu;
/// 间隔时间逐步减慢
@property(nonatomic,assign)NSTimeInterval time;
/// 开始结束标志
@property(nonatomic,assign)BOOL action;
/// 一共走了多少步
@property(nonatomic,assign)NSInteger step;
/// 哪步停止
@property(nonatomic,assign)NSInteger stopStep;
@property(nonatomic,strong)UILabel *labelCenter;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.action = NO;
[self initUI];
}
#pragma mark - 点击事件
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
if (self.action == NO &&
self.index == 0 &&
self.step == 0 )
{
[self fuWei];
self.jiangLiIndex = [self getRandomNumber:0 to:(int)self.arrView.count];
NSLog(@"结果 = %ld",self.jiangLiIndex);
for (UILabel *label in self.arrView)
{
[label setBackgroundColor:[UIColor whiteColor]];
}
self.stopStep = self.arrView.count * self.quanShu + self.jiangLiIndex;
[self actionZhuanQuanQuan];
self.action = YES;
}
}
#pragma mark - 模拟抽奖结果
-(int)getRandomNumber:(int)from to:(int)to
{
return (int)(from + (arc4random() % (to - from + 1)));
}
#pragma mark - 模拟转圈圈
-(void)actionZhuanQuanQuan
{
UILabel *label = self.arrView[self.index];
[label setBackgroundColor:[UIColor redColor]];
if (self.stopStep - self.step <= 10)
{
self.time += 0.01f;
}
if (_stopStep == _step)
{
[self fuWei];
self.action = NO;
return;
}
if (self.index >= self.arrView.count - 1 )
{
self.index = -1;
self.quanShu ++;
}
self.index ++ ;
__weak __typeof(&*self)weakSelf = self;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(self.time/*延迟执行时间*/ * NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
[label setBackgroundColor:[UIColor whiteColor]];
weakSelf.step ++ ;
[weakSelf actionZhuanQuanQuan];
});
}
#pragma mark - 复位
-(void)fuWei
{
self.labelCenter.text = self.action == YES ? @"开始" :@"抽奖中。。。";
if (_stopStep == _step &&
_step > 0)
{
self.labelCenter.text =[NSString stringWithFormat:@"抽奖结果%ld\n点击开始抽奖",self.jiangLiIndex];
}
self.time = 0.006f;
self.index = 0;
self.step = 0;
self.quanShu = 3;
}
-(void)initUI
{
CGFloat wspace = 0;
CGFloat hSpace = 0;
CGFloat leftopSpace = 12;
CGFloat rIghtopSpace = 12;
CGFloat topSpace = 60;
CGFloat botomSpace = 12;
CGFloat sCreenW = self.view.frame.size.width - leftopSpace - rIghtopSpace;
CGFloat sCreenH = self.view.frame.size.height - topSpace - botomSpace;
CGFloat x = leftopSpace;
CGFloat y = topSpace;
CGFloat w = 40;
CGFloat h = 40;
FrameType frameType;
for (int i = 0 ; i < 1000 ; i++)
{
if (i == 0)
{
frameType = FrameTypeFirst;
}
else if (x + w - wspace + rIghtopSpace < sCreenW &&
y == topSpace)
{
frameType = FrameTypeRight;
}
else if (y + h - hSpace + botomSpace < sCreenH
&& x != rIghtopSpace
&& x < sCreenW)
{
frameType = FrameTypeDown;
}
else
{
if (x == leftopSpace)
{
frameType = FrameTypeUp;
}
else
{
frameType = FrameTypeLeft;
}
}
switch (frameType)
{
case FrameTypeFirst:
break;
case FrameTypeRight:
x += w;
x += wspace;
break;
case FrameTypeDown:
y += h;
y += hSpace;
break;
case FrameTypeLeft:
x -= w;
x -= wspace;
break;
case FrameTypeUp:
y -= h;
y -= hSpace;
break;
default:
break;
}
UIView *view = self.arrView.firstObject;
CGRect frame = CGRectMake(x, y, w, h);
if(CGRectEqualToRect(view.frame,frame))
{
break;
}
UILabel *label = [[UILabel alloc]init];
label.frame = frame;
label.text = [NSString stringWithFormat:@"%d",i];
[label setTextAlignment:(NSTextAlignmentCenter)];
label.textColor = [UIColor blackColor];
label.layer.borderWidth = 1;
label.layer.borderColor = [UIColor grayColor].CGColor;
[self.view addSubview:label];
[self.arrView addObject:label];
// NSLog(@"%@",NSStringFromCGRect(frame));
}
[self.view addSubview:self.labelCenter];
}
-(UILabel *)labelCenter{
if (!_labelCenter)
{
UILabel *labelCenter = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 50)];
labelCenter.center = self.view.center;
labelCenter.numberOfLines = 0;
[labelCenter setTextAlignment:(NSTextAlignmentCenter)];
labelCenter.text = @"开始";
_labelCenter = labelCenter;
}
return _labelCenter;
}
-(NSMutableArray *)arrView
{
if (!_arrView)
{
_arrView = [NSMutableArray array];
}
return _arrView;
}
@end