RDSBindSubDeviceVC.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. //
  2. // RDSBindSubDeviceVC.m
  3. // Temperature
  4. //
  5. // Created by RD on 2023/4/17.
  6. //
  7. #import "RDSBindSubDeviceVC.h"
  8. #import <WebKit/WebKit.h>
  9. #import <SDWebImage/SDWebImage.h>
  10. @interface RDSBindSubDeviceVC ()
  11. @property (weak, nonatomic) IBOutlet UIView *gifView;
  12. @property (weak, nonatomic) IBOutlet UIView *searchView;
  13. @property (weak, nonatomic) IBOutlet UIImageView *ringImgView;
  14. @property (weak, nonatomic) IBOutlet UIButton *finishBtn;
  15. @property (nonatomic, strong) CADisplayLink *displayLink;
  16. @end
  17. @implementation RDSBindSubDeviceVC
  18. - (void)viewDidLoad {
  19. [super viewDidLoad];
  20. // Do any additional setup after loading the view from its nib.
  21. self.title = @"绑定设备";
  22. [self startAnimation];
  23. // RDS_WEAKSELF(weakSelf)
  24. // [RDSDemoApiHelper rds_createRoom:_roomName control_number:_deviceID device_type_id:self.deviceTypeModel.record_id success:^(id responseObject) {
  25. //
  26. // if ([responseObject[@"code"] intValue] != 0) {
  27. // [RDSHudShower showBottomToast:responseObject[@"message"]];
  28. // [self.navigationController popViewControllerAnimated:YES];
  29. // }else{
  30. // [weakSelf p_cancelTimeout];
  31. // [RDSHudShower showCenterToast:@"绑定成功"];
  32. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  33. // [weakSelf p_setupGif];
  34. // });
  35. // }
  36. //
  37. // } failure:^(NSError *error) {
  38. // [RDSHudShower showBottomToast:@"连接服务器失败"];
  39. // [self.navigationController popViewControllerAnimated:YES];
  40. // }];
  41. //
  42. // dispatch_async(dispatch_get_main_queue(), ^{
  43. // [self performSelector:@selector(p_timeout) withObject:nil afterDelay:120];
  44. // });
  45. }
  46. // 配对超时 延时任务
  47. - (void)p_timeout{
  48. [RDSHudShower showCenterToast:@"绑定失败,配对超时。"];
  49. }
  50. // 取消执行延时任务
  51. - (void)p_cancelTimeout{
  52. dispatch_async(dispatch_get_main_queue(), ^{
  53. [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(p_timeout) object:nil];
  54. });
  55. }
  56. - (void)viewDidDisappear:(BOOL)animated{
  57. [super viewDidDisappear:animated];
  58. [self stopAnimation];
  59. }
  60. - (IBAction)finishAciton {
  61. [self popToRootViewControllerAnimated:YES];
  62. }
  63. #pragma mark - 爱的魔力转圈圈
  64. - (void)startAnimation{
  65. // 爱的魔力转圈圈
  66. self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(d_displayLinkAnimation)];
  67. [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
  68. // 每秒调用次数 = 60/frameInterval
  69. //self.displayLink.preferredFramesPerSecond = 3;
  70. self.displayLink.paused = NO;
  71. }
  72. - (void)stopAnimation{
  73. self.displayLink.paused = YES;
  74. [self.displayLink invalidate];
  75. self.displayLink = nil;
  76. }
  77. static CGFloat const RDSNormalAngle = 0.08;// 1/60秒旋转的角度
  78. static CGFloat const RDSLowAngle = 0.08; // 秒旋转的角度
  79. static CGFloat const RDSHighAngle = 0.08; // 秒旋转的角度
  80. static CGFloat curAngle = 0;
  81. - (void)d_displayLinkAnimation {
  82. if (curAngle >= 2*M_PI) {
  83. curAngle -= 2*M_PI;
  84. }
  85. if (curAngle >= 0 && curAngle <= M_PI/3.0) {
  86. self.ringImgView.transform = CGAffineTransformRotate(self.ringImgView.transform, RDSNormalAngle);
  87. curAngle += RDSNormalAngle;
  88. }
  89. else if (curAngle > M_PI/3.0 && curAngle <= M_PI_2*3) {
  90. self.ringImgView.transform = CGAffineTransformRotate(self.ringImgView.transform, RDSHighAngle);
  91. curAngle += RDSHighAngle;
  92. }
  93. else {
  94. self.ringImgView.transform = CGAffineTransformRotate(self.ringImgView.transform, RDSLowAngle);
  95. curAngle += RDSLowAngle;
  96. }
  97. }
  98. #pragma mark - GIF
  99. - (void)p_setupGif{
  100. _finishBtn.hidden = NO;
  101. if(_searchView.hidden) return;
  102. _searchView.hidden = YES;
  103. [self stopAnimation];
  104. NSData *gifData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"finish" ofType:@"gif"]];
  105. // gif只播放1次
  106. CGImageSourceRef gifSource = CGImageSourceCreateWithData(CFBridgingRetain(gifData), nil);
  107. size_t gifCount = CGImageSourceGetCount(gifSource);
  108. NSMutableArray *frames = [NSMutableArray array];
  109. UIImage *lastImg;
  110. for (size_t i = 0; i < gifCount; i++) {
  111. CGImageRef imageRef =CGImageSourceCreateImageAtIndex(gifSource, i,NULL);
  112. UIImage*image = [UIImage imageWithCGImage:imageRef];
  113. [frames addObject:image];
  114. CGImageRelease(imageRef);
  115. if(i == gifCount-1){
  116. lastImg = image;
  117. }
  118. }
  119. UIImageView *imgView = [[UIImageView alloc] init];
  120. imgView.frame = CGRectMake(0, 0, _gifView.rds_width, _gifView.rds_height);
  121. [_gifView addSubview:imgView];
  122. imgView.animationImages = frames;
  123. imgView.animationDuration = 2.5;
  124. imgView.animationRepeatCount = 1;
  125. [imgView startAnimating];
  126. RDS_WEAKSELF(weakSelf)
  127. UIImageView *ok = [[UIImageView alloc] init];
  128. ok.frame = CGRectMake(0, 0, weakSelf.gifView.rds_width, weakSelf.gifView.rds_height);
  129. ok.alpha = 0;
  130. [self.gifView addSubview:ok];
  131. [ok setImage:lastImg];
  132. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  133. ok.alpha = 1;
  134. });
  135. }
  136. - (void)dealloc{
  137. [kNotificationCenter removeObserver:self];
  138. DDLog(@"dealloc~~ 绑定设备");
  139. }
  140. @end