日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大转盘抽奖

發(fā)布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大转盘抽奖 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先感謝那些有關(guān)抽獎demo的開源代碼作者,感謝你們的共享!


這個demo不僅可以隨機進行抽獎,也可以設(shè)置想要的獎品進行抽獎,廢話不多說,直接上代碼。。。

主要代碼 #import <UIKit/UIKit.h>//抽獎結(jié)果(獎品下標) typedef void(^Completion)(NSInteger index);@interface LuckyDrawView : UIView/*** 自定義初始化方法** @param frame frame坐標* @param prizeArr 獎品數(shù)組* @param completion 抽獎結(jié)果獎品* @param selectPrize 設(shè)置抽選固定獎品** @return*/ - (id)initWithFrame:(CGRect)frame prizeArray:(NSArray<NSString *> *)prizeArray completion:(Completion)completion selectPrize:(NSString *)selectPrize first:(BOOL)first;@end下面是主要實現(xiàn)的代碼 #import "LuckyDrawView.h"#define kDegreesToRadians(degrees) ((M_PI * degrees)/ 180) #define AKAngle(radian) (radian / M_PI * 180.f) #define AKCos(a) cos(a / 180.f * M_PI) #define AKSin(a) sin(a / 180.f * M_PI)static NSString *string = @"0";@interface PrizePlateView : UIView@property(nonatomic ,assign)float degrees;@end@implementation PrizePlateView//自定初始化獎盤 -(id)initWithFrame:(CGRect)frame degrees:(float)degrees {self = [super initWithFrame:frame];if (self) {_degrees = degrees;self.backgroundColor = [UIColor clearColor];}return self; }-(void)drawRect:(CGRect)rect {float width = rect.size.width;float height = rect.size.height;float moveAngle = self.degrees + 270 > 360 ? self.degrees - 90 : self.degrees + 270 ;CGContextRef cont = UIGraphicsGetCurrentContext();CGContextSetStrokeColorWithColor(cont, [UIColor colorWithRed:1 green:1 blue:1 alpha:0.3].CGColor);CGContextSetLineWidth(cont, width / 3.f);CGContextAddArc(cont, width / 2.f, height / 2.f, width / 3.f, kDegreesToRadians(270), kDegreesToRadians(moveAngle), 0);CGContextDrawPath(cont, kCGPathStroke);CGContextRef cont1 = UIGraphicsGetCurrentContext();CGContextSetStrokeColorWithColor(cont1, [UIColor redColor].CGColor);CGContextSetLineWidth(cont1, width / 20.f);CGContextAddArc(cont1, width / 2.f, height / 2.f, 11 * width / 40.f, kDegreesToRadians(270), kDegreesToRadians(moveAngle), 0);CGContextDrawPath(cont, kCGPathStroke); }@end@interface LuckyDrawView()@property (nonatomic, strong) NSArray *prizeArray; @property (nonatomic, strong) PrizePlateView *prizeView; @property (nonatomic, assign) NSInteger prizeIndex; @property (nonatomic, assign) NSInteger rotatCount; @property (nonatomic, assign) NSInteger progressCount; @property (nonatomic, strong) NSTimer *timer; @property (nonatomic, strong) NSTimer *timerTwo; @property (nonatomic, copy) Completion competion; @property (nonatomic, assign) BOOL canBegin; @property (nonatomic, assign) BOOL first; @property (nonatomic, strong) NSString *selectPrize; @property (nonatomic, assign) int number; @property (nonatomic, assign) float time;@end@implementation LuckyDrawView-(id)initWithFrame:(CGRect)frame prizeArray:(NSArray<NSString *> *)prizeArray completion:(Completion)completion selectPrize:(NSString *)selectPrize first:(BOOL)first {self = [super initWithFrame:frame];if (self) {//設(shè)置轉(zhuǎn)動圈數(shù)的初始值self.number = 0;//設(shè)置轉(zhuǎn)一圈的時間self.time = 0.4;//獎品數(shù)組self.prizeArray = prizeArray;//block設(shè)置self.competion = completion;//設(shè)置加速加速圈數(shù)self.progressCount = self.prizeArray.count * 2;//是否在抽獎self.canBegin = YES;//轉(zhuǎn)動總?cè)?shù)self.rotatCount = prizeArray.count * 10;//設(shè)置默認獎品self.selectPrize = selectPrize;//設(shè)置背景色self.backgroundColor = [UIColor clearColor];//設(shè)置首次self.first = first;}return self; }-(void)drawRect:(CGRect)rect {float width = rect.size.width;float height = rect.size.height;float degrees = (1 / (float)self.prizeArray.count) * 360.f;float statAngle = kDegreesToRadians(270.f);self.prizeView = [[PrizePlateView alloc] initWithFrame:rect degrees:degrees];[self addSubview:self.prizeView];float radius = 2 * width / 5.f + width / 10.f;float radius1 = width / 5.f;for (int i = 0; i < self.prizeArray.count; i++) {//計算弧度float moveAngle = degrees * (i + 1) + 270 > 360 ? degrees * (i + 1) - 90 : degrees * (i + 1) + 270 ;//繪制弧度CGContextRef cont = UIGraphicsGetCurrentContext();CGContextSetStrokeColorWithColor(cont, [UIColor colorWithRed:255 / 255.f green:166 / 255.f blue:49 / 255.f alpha:1].CGColor);CGContextSetLineWidth(cont, width / 5.f);CGContextAddArc(cont, width / 2.f, height / 2.f, 2 * width / 5.f, statAngle, kDegreesToRadians(moveAngle), 0);CGContextDrawPath(cont, kCGPathStroke);statAngle = kDegreesToRadians(moveAngle);//繪制分割線CGContextRef cont1 = UIGraphicsGetCurrentContext();CGContextMoveToPoint(cont1, radius + AKSin(i * degrees) * radius, radius - AKCos(i * degrees) * radius);CGContextAddLineToPoint(cont1, (radius + AKSin(i * degrees) * radius) - AKSin(i * degrees) * radius1, (radius - AKCos(i * degrees) * radius) + AKCos(i * degrees) * radius1);CGContextSetStrokeColorWithColor(cont1, [UIColor whiteColor].CGColor);CGContextSetLineWidth(cont1, 1);CGContextDrawPath(cont1, kCGPathStroke);//添加獎品名稱UILabel *label = [[UILabel alloc] init];label.text = [self.prizeArray objectAtIndex:i];label.font = [UIFont systemFontOfSize:13];label.textColor = [UIColor blackColor];label.numberOfLines = 0;label.lineBreakMode = NSLineBreakByTruncatingTail;CGSize size = [label sizeThatFits:CGSizeMake(100, 99999)];label.frame = CGRectMake(0, 0, size.width, size.height);float labelDegees = i * degrees + degrees / 2.f;float centerX = AKSin(labelDegees) * 2 * width / 5.f + radius;float centerY = radius - AKCos(labelDegees) * 2 * width / 5.f;label.textAlignment = NSTextAlignmentCenter;label.center = CGPointMake(centerX, centerY);[self addSubview:label];label.transform = CGAffineTransformRotate(label.transform, kDegreesToRadians(labelDegees));}//中間按鈕部分CGContextRef cont2 = UIGraphicsGetCurrentContext();CGContextSetFillColorWithColor(cont2, [UIColor colorWithRed:255 / 255.f green:70 / 255.f blue:31 / 255.f alpha:1].CGColor);CGContextAddArc(cont2, width / 2.f, height / 2.f, 3 * width / 10.f, 0, 2 * M_PI, 0);CGContextDrawPath(cont2, kCGPathFill);UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];button.frame = CGRectMake(0, 0, 3 * width / 10.f, 3 * width / 10.f);button.center = CGPointMake(width / 2.f, height / 2.f);[self addSubview:button];[button setTitle:@"啟動" forState:UIControlStateNormal];[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];[button addTarget:self action:@selector(beginPrize) forControlEvents:UIControlEventTouchUpInside]; }//點擊開始抽獎 - (void)beginPrize {if (self.canBegin) {if (self.selectPrize) {for (int j = 0; j < self.prizeArray.count; j++) {NSString *prize = [self.prizeArray objectAtIndex:j];if ([prize isEqualToString:self.selectPrize]) {self.prizeIndex = j;}}string = @"1";}else{string = @"0";self.prizeIndex = arc4random() % (self.prizeArray.count -1);}[self rollingPrize];} }//抽獎動畫 - (void)rollingPrize {self.canBegin = NO;self.prizeView.transform = CGAffineTransformRotate(self.prizeView.transform, kDegreesToRadians(self.prizeView.degrees));self.number++;if (self.number == self.prizeArray.count*2) {self.time = 0.08;}else if (self.number < self.prizeArray.count*2){self.time = self.time - (0.3/self.progressCount);}else if (self.number > self.prizeArray.count * 8){self.time = self.time + (0.3/self.progressCount);} NSInteger allNumber = 0;if ([string isEqualToString:@"1"]) {if (self.first) {allNumber = self.rotatCount + self.prizeIndex;}else{allNumber = self.rotatCount + self.prizeIndex + (self.prizeArray.count - self.prizeIndex);}}else{allNumber = self.rotatCount + self.prizeIndex;}if (self.number == allNumber) {[self.timer invalidate];self.timer = nil;self.competion(((self.rotatCount + self.prizeIndex) % self.prizeArray.count));self.canBegin = YES;self.first = NO;self.number = 0;self.time = 0.4;}else{[self.timer invalidate];self.timer = [NSTimer scheduledTimerWithTimeInterval:self.time target:self selector:@selector(rollingPrize) userInfo:nil repeats:NO];} }@end

下面是效果圖


下面是源碼連接
點擊這里下載,希望對大家有幫助

總結(jié)

以上是生活随笔為你收集整理的大转盘抽奖的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 特级西西444www高清大胆免费看 | 九九热在线免费观看 | 91视频免费 | 内射无码专区久久亚洲 | 久久久久免费精品视频 | 亚洲美女爱爱 | 最新黄色av网站 | 欧美成人精品欧美一级乱黄 | 蜜臀av一区二区 | 男人的天堂av片 | 精品国产影院 | 亚洲精品专区 | 一本之道av| 欧美性生交片4 | 国产精品一区二区av | 女女调教被c哭捆绑喷水百合 | 欧美精品免费一区二区 | 亚洲无码精品一区二区三区 | 亚洲精品一区二区三区中文字幕 | 日日碰狠狠躁久久躁蜜桃 | 日噜噜夜噜噜 | 人妻丰满熟妇岳av无码区hd | 日韩成人无码 | 日日操夜夜爱 | 亚洲午码| 人人狠狠 | 黄色一级片av | 成年人免费在线观看 | 精品理论片 | 日本一区二区免费高清视频 | 天天做天天操 | 天天艹av | 久久久片| 丰满少妇乱子伦精品看片 | 欧美熟妇激情一区二区三区 | 奇米激情| 人妻 日韩精品 中文字幕 | 麻豆网址 | 自拍 亚洲 欧美 | 精品久久久久久国产 | 天堂网a | 91官网在线观看 | 女人黄色片 | 亚洲人免费 | 中文字幕成人av | 亚洲蜜桃视频 | 亚洲理论在线观看 | 男人av网站 | 人人澡人人澡人人 | 噜噜噜在线视频 | 精品国产伦一区二区三区免费 | a天堂资源在线观看 | 裸体美女免费视频网站 | 欧美人妻精品一区二区 | 国产第三区 | 草草视频在线观看 | 日韩精品视频播放 | 欧美一区二区三区成人片在线 | 天天操一操| 欧美精品videosex极品 | 欧美精品hd| 灌篮高手全国大赛电影 | 午夜xxxx| 久久久久久亚洲精品 | 国产69精品久久久久777 | 91嫩草入口 | 国产精品一区二区欧美 | 在线成人免费视频 | 丰满熟女人妻一区二区三区 | 美女屁股无遮挡 | 在线不卡一区二区 | 国产欧美一区二区三区视频在线观看 | 超碰人人草 | 男女高h视频 | 国产精品456| 在线播放少妇奶水过盛 | 国产suv精品一区二区68 | 激情内射亚洲一区二区三区爱妻 | www.桃色 | 久久嫩草精品久久久久 | 欧美bbbbbbbbbbbb精品 | 最近中文字幕在线观看视频 | 国产精品人人做人人爽人人添 | 女同调教视频 | 亚洲.www| av片网址 | 亚洲精品一区二区在线 | 国产欧美亚洲一区 | 免费视频亚洲 | 91视频在线免费观看 | 高清国产一区二区三区 | 老熟妇一区二区三区 | 一级片aaa | av日日操| 性涩av| 怡红院毛片 | 欧美日韩一区二区三区国产精品成人 | 国产免费黄色网址 | 三级黄色片免费 |