成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

iOS實(shí)現(xiàn)轉(zhuǎn)盤效果

瀏覽:84日期:2022-09-17 10:10:29

本文實(shí)例為大家分享了iOS實(shí)現(xiàn)轉(zhuǎn)盤效果的具體代碼,供大家參考,具體內(nèi)容如下

Demo下載地址: iOS轉(zhuǎn)盤效果

功能:實(shí)現(xiàn)了常用的iOS轉(zhuǎn)盤效果,輪盤抽獎(jiǎng)效果的實(shí)現(xiàn),轉(zhuǎn)盤可以暫停,旋轉(zhuǎn),已經(jīng)快速旋轉(zhuǎn)抽獎(jiǎng),選中的效果指向正上方。

效果圖:

iOS實(shí)現(xiàn)轉(zhuǎn)盤效果

工程文件目錄:

iOS實(shí)現(xiàn)轉(zhuǎn)盤效果

核心代碼:

//// ViewController.m// 轉(zhuǎn)盤效果//// Created by llkj on 2017/8/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import 'ViewController.h'#import 'WheelView.h'@interface ViewController ()@property (nonatomic, weak) WheelView *wheelV;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; WheelView *wheelV = [WheelView wheelView]; wheelV.center = self.view.center; self.wheelV = wheelV; [self.view addSubview:wheelV];}- (IBAction)rotation:(id)sender { [self.wheelV rotation];}- (IBAction)stop:(id)sender { [self.wheelV stop];}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end

WheelView文件

//// WheelView.h// 轉(zhuǎn)盤效果//// Created by llkj on 2017/8/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import <UIKit/UIKit.h>@interface WheelView : UIView+ (instancetype)wheelView;- (void)rotation;- (void)stop;@end

//// WheelView.m// 轉(zhuǎn)盤效果//// Created by llkj on 2017/8/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import 'WheelView.h'#import 'WheelBtn.h'#define angle2Rad(angle) ((angle) / 180.0 * M_PI)@interface WheelView ()<CAAnimationDelegate>@property (weak, nonatomic) IBOutlet UIImageView *contentV;@property (nonatomic, weak) UIButton *selectBtn;@property (nonatomic, strong) CADisplayLink *link;@end@implementation WheelView- (CADisplayLink *)link { if (_link == nil) { CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)]; [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; _link = link; } return _link;}+ (instancetype)wheelView { return [[[NSBundle mainBundle] loadNibNamed:@'WheelView' owner:nil options:nil] lastObject];}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { self = [[[NSBundle mainBundle] loadNibNamed:@'WheelView' owner:nil options:nil] lastObject]; } return self;}- (void)awakeFromNib { [super awakeFromNib]; CGFloat btnW = 68; CGFloat btnH = 143; CGFloat angle = 0; //加載原始大圖片 UIImage *oriImage = [UIImage imageNamed:@'LuckyAstrology']; //加載原始選中的大圖片 UIImage *oriSelImg = [UIImage imageNamed:@'LuckyAstrologyPressed']; CGFloat X = 0; CGFloat Y = 0; CGFloat sacle = [UIScreen mainScreen].scale; CGFloat clipW = oriImage.size.width / 12.0 * sacle; CGFloat clipH = oriImage.size.height * sacle; for (int i = 0; i < 12; i ++) { WheelBtn *btn = [WheelBtn buttonWithType:UIButtonTypeCustom]; btn.bounds = CGRectMake(0, 0, btnW, btnH); //按鈕正常狀態(tài)圖片 X = i * clipW; //給定一張圖片截取指定區(qū)域內(nèi)的圖片 CGImageRef clipImg = CGImageCreateWithImageInRect(oriImage.CGImage, CGRectMake(X, Y, clipW, clipH)); [btn setImage:[UIImage imageWithCGImage:clipImg] forState:UIControlStateNormal]; //按鈕選中狀態(tài)圖片 CGImageRef clipSelImg = CGImageCreateWithImageInRect(oriSelImg.CGImage, CGRectMake(X, Y, clipW, clipH)); [btn setImage:[UIImage imageWithCGImage:clipSelImg] forState:UIControlStateSelected]; [btn setBackgroundImage:[UIImage imageNamed:@'LuckyRototeSelected'] forState:UIControlStateSelected]; btn.layer.anchorPoint = CGPointMake(0.5, 1); btn.layer.position = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5); btn.transform = CGAffineTransformMakeRotation(angle2Rad(angle)); angle += 30; [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.contentV addSubview:btn]; //默認(rèn)第一個(gè)按鈕選中 if (i == 0) { [self btnClick:btn]; } }}- (void)btnClick:(UIButton *)btn { //1.讓當(dāng)前選中的按鈕取消選中 self.selectBtn.selected = NO; //2.讓當(dāng)前點(diǎn)擊的按鈕成為選中狀態(tài) btn.selected = YES; //3.當(dāng)前點(diǎn)擊的按鈕成為選中狀態(tài) self.selectBtn = btn;}- (void)rotation { self.link.paused = NO;}- (void)stop { self.link.paused = YES;}- (void)update { self.contentV.transform = CGAffineTransformRotate(self.contentV.transform, M_PI / 300.0);}- (IBAction)start:(id)sender { //快速轉(zhuǎn)幾圈 CABasicAnimation *anim = [CABasicAnimation animation]; anim.keyPath = @'transform.rotation'; anim.toValue = @(M_PI * 4); anim.duration = 0.5; anim.repeatCount = 1; anim.delegate = self; [self.contentV.layer addAnimation:anim forKey:nil];}- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { CGAffineTransform transform = self.selectBtn.transform; //獲取當(dāng)前選中按鈕的旋轉(zhuǎn)角度 CGFloat angle = atan2(transform.b, transform.a); //動(dòng)畫結(jié)束時(shí)當(dāng)前選中的按鈕指向最上方 self.contentV.transform = CGAffineTransformMakeRotation(-angle);}@end

WheelBtn.m

//// WheelBtn.m// 轉(zhuǎn)盤效果//// Created by llkj on 2017/8/31.// Copyright © 2017年 LayneCheung. All rights reserved.//#import 'WheelBtn.h'@implementation WheelBtn- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { CGRect rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height * 0.5); if (CGRectContainsPoint(rect, point)) { // 在指定的范圍內(nèi) return [super hitTest:point withEvent:event]; } else { return nil; }}//取消按鈕高亮狀態(tài)做的事- (void)setHighlighted:(BOOL)highlighted {}//返回當(dāng)前按鈕中的image位置和尺寸- (CGRect)imageRectForContentRect:(CGRect)contentRect { return CGRectMake((contentRect.size.width - 40) *0.5, 20, 40, 48);}//返回當(dāng)前按鈕中的Label位置和尺寸//- (CGRect)titleRectForContentRect:(CGRect)contentRect{////}@end

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: IOS
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日本免费新一区视频| 91香蕉国产在线观看软件| 亚洲黄色在线视频| 另类人妖一区二区av| 成人午夜电影久久影院| 亚洲承认在线| 欧美午夜理伦三级在线观看| 久久午夜国产精品| 亚洲线精品一区二区三区八戒| 国产一区91精品张津瑜| 亚洲黄色成人久久久| 日韩国产成人精品| 成人h动漫精品一区二| 亚洲一区二区四区| 久久精品夜色噜噜亚洲a∨| 午夜精品爽啪视频| 欧美 日韩 国产精品免费观看| 午夜亚洲福利在线老司机| 精品欧美一区二区久久| 天堂精品中文字幕在线| 欧美精品大片| 欧美日精品一区视频| 中文字幕中文乱码欧美一区二区| 开心九九激情九九欧美日韩精美视频电影| 国产精品国产三级欧美二区 | 亚洲精品123区| 91精品国产一区二区三区| 亚洲一卡二卡三卡四卡| 91亚洲国产成人精品一区二区三| 91久久精品午夜一区二区| 中文字幕中文乱码欧美一区二区 | 精品1区2区在线观看| 欧美精品一二三| 1区2区3区国产精品| 国产成人欧美日韩在线电影| 免费亚洲网站| 亚洲国产成人自拍| 国产一区二区在线看| 性娇小13――14欧美| 国产精品久久久久久久午夜片 | 日韩精品一二三四| 亚洲国产日韩美| 精品国产一区二区三区久久久蜜月 | 欧美三级视频在线观看| 综合欧美一区二区三区| 99视频在线精品| 欧美乱妇23p| 视频一区免费在线观看| 激情婷婷亚洲| 国产亚洲福利社区一区| 国产在线播精品第三| 蜜桃av综合| 亚洲品质自拍视频| 欧美激情亚洲| 精品福利一区二区三区| 久久99国产精品免费网站| 男人的天堂亚洲在线| 亚洲人成人一区二区在线观看| 成人激情动漫在线观看| 欧美日韩大陆一区二区| 性久久久久久久久久久久| 亚洲精一区二区三区| 国产人久久人人人人爽| 国产精品原创巨作av| 欧美日韩在线播| 美洲天堂一区二卡三卡四卡视频| 亚洲一区尤物| 亚洲精品大片www| 韩日精品在线| 国产性做久久久久久| 成人av网址在线| 91精品国产免费| 久久99久久精品欧美| 色婷婷综合中文久久一本| 亚洲一区二区高清| 国产欧美日韩综合精品二区| 国产精品美女www爽爽爽| av电影在线观看一区| 精品少妇一区二区三区日产乱码| 国产福利视频一区二区三区| 91精品国产欧美一区二区18| 韩国欧美国产1区| 69av一区二区三区| 国产在线麻豆精品观看| 欧美日韩dvd在线观看| 九九九精品视频| 欧美色精品天天在线观看视频| 日韩高清在线不卡| 欧洲生活片亚洲生活在线观看| 日日欢夜夜爽一区| 麻豆九一精品爱看视频在线观看免费| 亚洲一区在线观看免费观看电影高清 | 喷水一区二区三区| 91成人在线观看喷潮| 日本v片在线高清不卡在线观看| 久久精品在线| 免费视频最近日韩| 欧美日韩国产成人在线免费| 激情六月婷婷久久| 91麻豆精品国产自产在线观看一区 | 精品在线亚洲视频| 欧美三级在线看| 看电影不卡的网站| 欧美日韩成人综合天天影院| 国产麻豆成人传媒免费观看| 日韩一区二区三区精品视频 | 久久亚洲高清| 久久99精品网久久| 欧美一区二区三区视频在线| 亚洲丰满少妇videoshd| 西西裸体人体做爰大胆久久久| 日韩中文字幕亚洲一区二区va在线 | 欧美精品二区三区四区免费看视频| 国产日韩欧美高清| 黄色日韩在线| 亚洲一级不卡视频| 免费亚洲视频| 久久99精品国产麻豆婷婷洗澡| 4438成人网| 欧美凹凸一区二区三区视频| 中文字幕一区二区三区蜜月| 亚洲一区二区高清视频| 老色鬼精品视频在线观看播放| 欧美一二三区在线| 欧美日韩精选| 一区二区三区鲁丝不卡| 日本高清不卡一区| 国产成人亚洲综合a∨婷婷图片| 2021中文字幕一区亚洲| 极品av少妇一区二区| 午夜成人在线视频| 欧美一区二区在线播放| 欧美1区2区3区| 一级女性全黄久久生活片免费| 久久综合网络一区二区| 国产成人精品三级| 国产精品丝袜一区| 久久人人97超碰人人澡爱香蕉| 国产米奇在线777精品观看| 久久日韩粉嫩一区二区三区| 亚洲片区在线| 蜜桃av噜噜一区| 久久婷婷成人综合色| 一本久道久久综合狠狠爱| 日韩av在线播放中文字幕| 欧美一区二区三区白人| 麻豆国产精品777777在线| 欧美影院一区二区| 国产很黄免费观看久久| 久草在线在线精品观看| 在线观看亚洲专区| 蜜芽一区二区三区| 亚洲人成精品久久久久| 国产精品亚洲产品| 国产一区 二区 三区一级| 国产精品理论在线观看| 91激情五月电影| 亚洲欧美伊人| 无码av免费一区二区三区试看 | 国产色91在线| 国产欧美69| 国产成人精品三级| 一区二区三区在线观看国产| 欧美老年两性高潮| 黄色av一区| 国产一区二区三区免费播放 | 怡红院av一区二区三区| 欧美一区二区久久久| 一区二区三区你懂的| a亚洲天堂av| 亚洲电影一级黄| 久久中文字幕电影| 色天天综合色天天久久| 99国内精品久久| 天堂在线亚洲视频| 久久在线观看免费| 久久香蕉精品| 欧美日韩在线高清| 黑人巨大精品欧美黑白配亚洲| 国产精品麻豆一区二区| 国产精品久久久久久久久果冻传媒| 欧美三级三级三级爽爽爽| 亚洲天堂黄色| 东方aⅴ免费观看久久av| 国产视频在线观看一区| 国内精品嫩模私拍在线| 亚洲精品欧美在线| 精品国产亚洲一区二区三区在线观看| 欧美亚洲三区| 国产精品二区三区四区| 国产乱子轮精品视频| 一区二区三区 在线观看视频| 日韩欧美视频在线| 亚洲综合电影一区二区三区| 91一区二区在线| 狠狠色丁香久久婷婷综合丁香| 亚洲美女区一区| 欧美午夜国产| 成人禁用看黄a在线| 麻豆成人91精品二区三区|