#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface YaoJiangView : UIView
/** 按钮名字 */
@property (nonatomic, strong) NSArray *arr;
/** 摇奖结果不是随机的 而是固定的 可以自定义摇奖结果 */
@property (nonatomic, strong) NSString *stopStr;
@end
NS_ASSUME_NONNULL_END
#import "YaoJiangView.h"
#define GuDing 3
#define HangCount 4
@interface YaoJiangView ()
/** 存放包括开始按钮 以及四周的一圈摇奖选项 的全部按钮 */
@property (nonatomic, strong) NSMutableArray *buttonArr;
/** 当前高亮的选项 */
@property (nonatomic, assign) NSInteger buttonINdex;
/** 除去中间按钮以外的 四周按钮 */
@property (nonatomic, strong) NSMutableArray *yaoJiangArr;
/**
停止信号
但不是立刻停止
在减速缓冲圈数完成 和 最后抽奖结果一致
三个信号均满足才会停止
*/
@property (nonatomic, assign) BOOL stop;
/** 开始按钮 */
@property (nonatomic, strong) UIButton *actionButton;
/** 缓冲圈数 */
@property (nonatomic, assign) NSInteger quanShu;
/** 秒数 */
@property (nonatomic, assign) CGFloat miaoShu;
@end
@implementation YaoJiangView
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
}
return self;
}
-(void)setArr:(NSArray *)arr
{
_arr = arr;
[self initUI];
}
-(void)setStopStr:(NSString *)stopStr
{
_stopStr = stopStr;
}
- (void)initUI
{
_quanShu = 0;
_miaoShu = 0.05f;
self.buttonArr = [self addMenuButton:self.arr];
self.yaoJiangArr = self.buttonArr;
for (int i = 0; i < self.yaoJiangArr.count; ++i)
{
for (int j = 0; j < self.yaoJiangArr.count-1; ++j)
{
UIButton *button = self.yaoJiangArr[j];
UIButton *button2 = self.yaoJiangArr[j+1];
NSInteger namet = [button.currentTitle integerValue];
NSInteger namet2 = [button2.currentTitle integerValue];
if (namet > namet2)
{
[self.yaoJiangArr exchangeObjectAtIndex:j withObjectAtIndex:j+1];
}
}
}
NSMutableArray *arrlast = [NSMutableArray array];
for (UIButton *button in self.yaoJiangArr)
{
NSString * namet = button.currentTitle;
if ([namet isEqualToString:@"开始"])
{
_actionButton = button;
}
else
{
[arrlast addObject:button];
}
}
self.yaoJiangArr = arrlast;
_buttonINdex = 0;
}
#pragma mark ————————— 创建button组 —————————————
-(NSMutableArray *)addMenuButton:(NSArray *)arr
{
NSMutableArray *arrReturn = [NSMutableArray array];
CGFloat screenW = CGRectGetWidth([UIScreen mainScreen].bounds);
CGFloat space = 0;
CGFloat x = 10;
CGFloat y = 100;
CGFloat w = ( screenW - space * 2 - x * ( HangCount + 1 ) ) / HangCount;
CGFloat h = 50;
CGFloat bigW = w * 2 + x ;
CGFloat temp = 0;
CGFloat newI = 0;
CGFloat newW = 0;
for (int i = 0; i < arr.count ; i++)
{
if ([arr[i] isEqualToString:@"10"] || [arr[i] isEqualToString:@"9"] )
{
y = y + h + x;
space = 0;
temp = i ;
}
space += newW + x;
if ([arr[i] isEqualToString:@"开始"] )
{
newW = bigW;
}
else
{
newW = w;
}
newI = i - temp;
if (newI == 0)
{
space = x;
}
UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
button.frame = CGRectMake(space, y, newW, h);
[button setTitle:arr[i] forState:(UIControlStateNormal)];
[button setBackgroundColor:[UIColor redColor]];
button.tag = i+10;
[button addTarget:self action:@selector(buttonSender:) forControlEvents:(UIControlEventTouchUpInside)];
[self addSubview:button];
// 这是 SDAutoLayout 的约束 引入第三方就可以
// button.sd_layout
// .topSpaceToView(self.view, y)
// .leftSpaceToView(self.view, space)
// .widthIs(newW)
// .heightIs(h);
[arrReturn addObject:button];
}
return arrReturn;
}
#pragma mark ————————— 点击事件 —————————————
-(void)buttonSender:(UIButton *)sender
{
if ([sender.currentTitle isEqualToString:@"开始"] )
{
NSLog(@"开始抽奖");
[sender setTitle:@"停止" forState:(UIControlStateNormal)];
for (UIButton *button in self.yaoJiangArr)
{
[button setBackgroundColor:[UIColor redColor]];
}
_buttonINdex = 0;
_stop = NO;
[self actionZhuanQuanQuan];
return;
}
if ([sender.currentTitle isEqualToString:@"停止"] )
{
[sender setTitle:@"开始" forState:(UIControlStateNormal)];
_stop = YES;
sender.enabled = NO;
}
}
#pragma mark ————————— 模拟转圈圈 —————————————
-(void)actionZhuanQuanQuan
{
NSLog(@"模拟转圈圈");
UIButton *button = self.yaoJiangArr[_buttonINdex];
// 收到停止信号
if (self.stop == YES)
{
//没完成一圈时间增加 模拟减速
if ([button.currentTitle isEqualToString:self.arr.firstObject])
{
_quanShu ++;
_miaoShu = _miaoShu+0.07;
}
}
__weak __typeof(&*self)weakSelf = self;
[UIView animateWithDuration:_miaoShu animations:^{
[button setBackgroundColor:[UIColor blueColor]];
} completion:^(BOOL finished) {
if ( weakSelf.stop == YES &&
weakSelf.quanShu == GuDing &&
[button.currentTitle isEqualToString:weakSelf.stopStr] )
{
weakSelf.actionButton.enabled = YES;
weakSelf.quanShu = 0;
weakSelf.miaoShu = 0.05f;
}
else
{
[button setBackgroundColor:[UIColor redColor]];
weakSelf.buttonINdex ++;
if (weakSelf.buttonINdex > weakSelf.yaoJiangArr.count-1)
{
weakSelf.buttonINdex = 0;
}
[weakSelf actionZhuanQuanQuan];
}
}];
}
-(NSMutableArray *)yaoJiangArr{
if (!_yaoJiangArr)
{
_yaoJiangArr = [NSMutableArray array];
}
return _yaoJiangArr;
}
-(NSMutableArray *)buttonArr{
if (!_buttonArr)
{
_buttonArr = [NSMutableArray array];
}
return _buttonArr;
}
@end
#import "ViewController.h"
#import "YaoJiangView.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSArray *arr = @[@"1",@"2",@"3",@"4",@"10",@"开始",@"5",@"9",@"8",@"7",@"6"];
YaoJiangView *view = [[YaoJiangView alloc]initWithFrame:self.view.bounds];
view.arr = arr;
view.stopStr = arr[3];
[self.view addSubview:view];
}
@end