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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

iOS篇—Demo6—抽奖转盘

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS篇—Demo6—抽奖转盘 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Demo6—抽獎轉盤
一.搭建界面
1.設置背景圖片

self.view.layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"LuckyBackground"].CGImage);

2.自定義一個類管理轉盤視圖,并用xib關聯界面

  • 創建一個xib文件,負責管理界面的基本搭建,與LuckWheelView類關聯

    并設置圖片的大小
  • 寫一個類方法快速創建當前類LuckWheelView的一個對象
+ (LuckWheelView *)wheel{//創建當前類的一個對象LuckWheelView *luckView = [[[NSBundle mainBundle] loadNibNamed:@"LuckWheelView" owner:self options:nil] lastObject];//放回對象return luckView; }
  • 在控制類中用戶使用,創建轉盤視圖,并設置視圖處于主視圖中心
LuckWheelView *luckView = [LuckWheelView wheel]; luckView.center = self.view.center;
  • 讓這個轉盤視圖顯示到主視圖上
[self.view addSubview:luckView];

3.當xib文件加載結束后執行后續事件

  • 由于xib中搭建的界面背景是白色的,所以,為了視覺感,將其背景顏色設為透明
self.backgroundColor = [UIColor clearColor];
  • 給轉盤上添加12個按鈕,不接收事件,設置按鈕的中心位置為視圖的中心;設置按鈕的大小;設置按鈕的錨點在矩形的下邊線中間,以便其他按鈕通過旋轉形成圓盤;給按鈕設置背景圖片,并把各個按鈕添加到轉盤視圖上,不可添加到主視圖上,因為給主視圖上添加視圖是添加到主視圖的最外層,會覆蓋一部分視圖;旋轉按鈕,每次循環旋轉30°;給按鈕上添加內容圖片,表示抽獎結果。
for (int i = 0; i < 12; i++) {UIButton *btn = [[UIButton alloc] init];//設置位置btn.layer.position = self.center;//設置尺寸btn.layer.bounds = CGRectMake(0, 0, 68, 143);//設置錨點btn.layer.anchorPoint = CGPointMake(0.5, 1);//設置圖片[btn setBackgroundImage:[UIImage imageNamed:@"LuckyRototeSelected"] forState:UIControlStateSelected];[self.wheelImageView addSubview:btn];//旋轉圖片btn.transform = CGAffineTransformRotate(btn.transform, M_PI * 2 / 12 * i); }
  • 為了提高可移植性,把截取圖片寫成一個工具類別,分兩步實現,第一步是已知所裁圖片的名稱和裁第幾個,然后根據得到的圖片和范圍裁剪需要的那個圖片。
  • 第一步:先通過已知的圖片名稱讀取圖片,然后計算截取一個圖片的寬高,但是為了適應不同型號的手機大小,在這里需要乘一個倍數,最后計算出裁剪的范圍
+ (UIImage *)clipWithImageNamed:(NSString *)imgName index:(int)index{//讀取圖片UIImage *img = [UIImage imageNamed:imgName];//計算每一個的寬高CGFloat width = img.size.width / 12.0 * [UIScreen mainScreen].scale;CGFloat height = img.size.height * [UIScreen mainScreen].scale;//計算裁剪的范圍CGRect frame = CGRectMake(index * width, 0, width, height);return [self clipWithImage:img rect:frame]; }
  • 第二步:算出要裁剪的范圍后,調用CGImageCreateWithImageInRect方法直接裁取指定范圍內的圖片

CGImageRef是一個結構體指針,這個結構用來創建像素位圖,可以通過操作存儲的像素位來編輯圖片

typedef struct CF_BRIDGED_TYPE(id) CGImage *CGImageRef; +(UIImage *)clipWithImage:(UIImage *)img rect:(CGRect)frame{CGImageRef imgRef = CGImageCreateWithImageInRect(img.CGImage, frame);/*匹配屏幕大小參數1: cgImage:image.CGImage image為原始圖片參數2:scale:原始圖片放大倍數參數3:orientation:控制image的繪制方向*/UIImage *newImage = [UIImage imageWithCGImage:imgRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];return newImage; }
  • 在for循環那里加上裁取內容圖片這一步
//截取圖片 UIImage *orgLongImage = [UIImage clipWithImageNamed:@"LuckyAstrology" index:i];//將圖片顯示到按鈕上 [btn setImage:orgLongImage forState:UIControlStateNormal];

二.觸發事件
1.在LuckWheelView類中關聯xib中開始抽獎按鈕的時間
2.設置一個定時器控制轉盤的開始和暫停

  • 定一個屬性變量link
@property(nonatomic, strong) CADisplayLink *link;
  • 當link為空時轉盤開始,不為空時轉盤暫停,轉盤暫停之后繼續轉一個角度經過一個緩沖后再停下
- (IBAction)startButtonDidClicked:(id)sender {if (self.link) {//self.link.paused = !_link.paused;if (self.link.paused == YES) {//1.暫停_link.paused = NO;} else {_link.paused = YES;//2.繼續旋轉一個角度[self stop];}} else{//創建定時器 執行旋轉任務self.link = [CADisplayLink displayLinkWithTarget:self selector:@selector(rotate)];//啟動定時器[_link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];} }
  • 轉盤開始轉的方法
- (void)rotate{_wheelImageView.transform = CGAffineTransformRotate(_wheelImageView.transform, M_PI/30); }

3.轉盤暫停后再轉一個角度緩沖并點亮箭頭所指的那個按鈕,首先需要計算出箭頭所指方向…

- (void)stop{[UIView animateWithDuration:2 animations:^{self.wheelImageView.transform = CGAffineTransformRotate(self.wheelImageView.transform, M_PI*8/9.0);} completion:^(BOOL finished) {//確定剪頭指向哪個按鈕//1.獲取旋轉之后的弧度CGFloat hudu = [self getRadianDegreeFromTransform:self.wheelImageView.transform];//2.根據弧度計算旋轉了幾個按鈕int index = (hudu - M_PI/12.0)/(M_PI/6.0);if (hudu - index*M_PI/6.0 > 0) {index++;}//3.通過tag值獲取按鈕對象_selectedButton = [self.wheelImageView viewWithTag:12-index+1];_selectedButton.selected = YES;}]; }
  • 計算旋轉的弧度
- (CGFloat)getRadianDegreeFromTransform:(CGAffineTransform)transform{CGFloat rotate = acosf(transform.a);// 旋轉180度后,需要處理弧度的變化if (transform.b < 0) {rotate = M_PI*2 - rotate;}return rotate; }

總結

以上是生活随笔為你收集整理的iOS篇—Demo6—抽奖转盘的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美成人免费视频 | 人人艹在线观看 | 国产视频精品久久 | 99久久婷婷国产综合精品青牛牛 | 久久精品国产清自在天天线 | 丁香六月天婷婷 | 黄色一区二区三区四区 | 国产成人精品一区二三区四区五区 | 在线免费观看黄视频 | 在线观看免费福利 | 日韩av首页 | 午夜小视频在线观看 | 伊人影视大全 | 男人插女人免费视频 | 天堂色综合| 老司机深夜福利视频 | 日日燥夜夜燥 | 国产 日韩 欧美在线 | 亚洲第一精品在线 | 日本免费福利视频 | 色偷偷视频 | 综合网亚洲 | 亚洲综合色在线观看 | 69色综合 | 国产亚洲视频在线 | 狠狠搞视频 | 狠狠干夜夜草 | 91色多多| 天天做日日干 | 日韩欧美视频一区二区三区 | 国产精品熟妇一区二区三区四区 | 亚洲欧美一区二区三区孕妇 | 亚洲精品欧美精品 | 欧美日韩乱国产 | 欧美日韩系列 | 精品三区视频 | 免费看a网站 | 中文字幕一区二区三区在线视频 | 亚洲国产精品视频一区二区 | 在线观看理论片 | 国产精品国产三级国产a | 奇米影视在线播放 | 欧美久久网 | 91蝌蚪在线 | 午夜日韩| va婷婷| 美日韩免费视频 | 欧美性猛交xxxx乱大交退制版 | 夜夜躁狠狠躁日日躁av | 色六月婷婷| 永久免费未网 | 伊人96| 91精品国产福利在线观看 | 日韩人妻精品无码一区二区三区 | 婷婷色婷婷开心五月四房播播 | 久久婷婷av | 免费看黄色av | 亚洲在线一区 | 国产精品一区二区三区四区 | 97久久精品 | av天天在线| 超在线视频 | 久久一区二区电影 | 男女乱淫视频 | 免费av网址在线观看 | 日b视频免费观看 | 免费看裸体视频网站 | 美女爽爽爽 | 亚洲美女高潮久久久 | 一道本av| 在线免费视频你懂的 | 97人妻精品一区二区三区软件 | 中文字幕网伦射乱中文 | 国产精品久久久久久亚洲影视 | 欧美三级一级片 | 中文字幕久久一区 | 亚洲一区二区黄片 | 女人脱下裤子让男人捅 | 韩国黄色片网站 | 欧美一区二区三区成人久久片 | 亚洲91在线 | 国产精品熟女视频 | 91黑人精品一区二区三区 | 姐姐你真棒插曲快来救救我电影 | 中文字幕91在线 | 欧美黄色一级网站 | 99热在线观看免费 | 国语对白永久免费 | 黄网在线播放 | 天天色天天插 | 黑人激情视频 | 久久综合色视频 | 波多野结衣一本一道 | 人人av在线 | 中文字幕av免费 | 国产日韩欧美视频在线观看 | 乱色熟女综合一区二区三区 | 色综合色综合 | 精品国产视频一区二区三区 |