VRFunctionView.mm 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. //
  2. // VRFunctionView.m
  3. // XMEye
  4. //
  5. // Created by riceFun on 16/12/1.
  6. // Copyright © 2016年 Megatron. All rights reserved.
  7. //
  8. #import "VRFunctionView.h"
  9. #define buttonHeight 36
  10. @implementation VRFunctionView
  11. -(instancetype)initWithFrame:(CGRect)frame VRType:(int)is180VR
  12. {
  13. self = [super initWithFrame:frame];
  14. self.is180VR = is180VR;
  15. if (self) {
  16. self.backgroundColor = [UIColor blackColor];
  17. self.hidden = YES;
  18. self.alpha = 0.5;
  19. self.VRType = 1;
  20. self.functionBtnArray = [[NSMutableArray alloc] initWithCapacity:0];
  21. [self addSubview:self.closeMode];
  22. [self addSubview:self.war];
  23. [self addSubview:self.ceiling];
  24. [self addSubview:self.Ball];
  25. [self addSubview:self.Rectangle];
  26. [self addSubview:self.BallBowl];
  27. [self addSubview:self.BallHat];
  28. [self addSubview:self.Cylinder];
  29. [self addSubview:self.Split];
  30. [self addSubview:self.dichotomia];
  31. [self addSubview:self.threeR];
  32. [self.functionBtnArray addObject:self.Ball];
  33. [self.functionBtnArray addObject:self.Rectangle];
  34. [self.functionBtnArray addObject:self.BallBowl];
  35. [self.functionBtnArray addObject:self.BallHat];
  36. [self.functionBtnArray addObject:self.Cylinder];
  37. [self.functionBtnArray addObject:self.Split];
  38. [self.functionBtnArray addObject:self.dichotomia];
  39. [self.functionBtnArray addObject:self.threeR];
  40. [[NSNotificationCenter defaultCenter]
  41. addObserver:self selector:@selector(getNotificationAction:) name:@"AcceptDelegate" object:nil];
  42. }
  43. //设置每个控件的位置,传入的值是360VR下的模式模式,YES是天花板模式
  44. [self layoutVRFunctionView:YES];
  45. return self;
  46. }
  47. - (void)getNotificationAction:(NSNotification *)notification{
  48. NSDictionary *infoDic = [notification object];
  49. int shapeTag = [[infoDic objectForKey:@"parameter1"] intValue];
  50. for (UIButton *btn in self.functionBtnArray) {
  51. [btn setSelected:NO];
  52. }
  53. [(UIButton *)self.functionBtnArray[shapeTag] setSelected:YES];
  54. }
  55. -(void)delegateChangeVRMode:(_XMVRShape)type{
  56. }
  57. -(void)setSelectVR:(int)type
  58. {
  59. for (UIButton *btn in self.subviews) {
  60. if (btn.tag >= Shape_End) {//壁挂和天花板 两个按钮
  61. }else{
  62. if ([btn isKindOfClass:[UIButton class]]) {
  63. if (btn.tag == type) {
  64. btn.selected = YES;
  65. }else{
  66. btn.selected = NO;
  67. }
  68. }
  69. }
  70. }
  71. }
  72. //刷新VR模式切换界面,360VR默认是天花板
  73. -(void)layoutVRFunctionView:(BOOL)isCeiling
  74. {
  75. //现刷新界面坐标 frame
  76. [self refreshFrame];
  77. //如果是180VR,不判断壁挂和天花板,直接刷新界面
  78. if (self.is180VR == YES) {
  79. [self.Ball setBackgroundImage:[UIImage imageNamed:@"VR_180_nor.png"] forState:UIControlStateNormal];
  80. [self.Ball setBackgroundImage:[UIImage imageNamed:@"VR_180_sel.png"] forState:UIControlStateSelected];
  81. [self layoutShape];
  82. }
  83. //360VR需要判断壁挂和天花板,默认天花板
  84. else{
  85. [self setCommon360VR];
  86. if (isCeiling) {
  87. //360VR 天花板
  88. [self layoutLong];
  89. }else{
  90. //360VR 壁装
  91. [self layoutShort];
  92. }
  93. }
  94. }
  95. -(void)refreshFrame{
  96. //关闭按钮坐标,随着界面坐标
  97. self.closeMode.frame = CGRectMake(0, 0,buttonHeight,buttonHeight);
  98. self.closeMode.center = CGPointMake(buttonHeight*1.5/2, self.frame.size.height/2);
  99. }
  100. //刷新180VR
  101. -(void)layoutShape
  102. {
  103. self.war.hidden = YES;
  104. self.ceiling.hidden = YES;
  105. //下面两个通用的
  106. self.Ball.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 0, 0, buttonHeight, buttonHeight);
  107. self.Rectangle.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 1, 0, buttonHeight, buttonHeight);
  108. self.Cylinder.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 2, 0, buttonHeight, buttonHeight);
  109. self.Split.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 3, 0, buttonHeight, buttonHeight);
  110. self.threeR.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 4, 0, buttonHeight, buttonHeight);
  111. [self.functionBtnArray removeAllObjects];
  112. self.Ball.hidden = NO;
  113. self.BallBowl.hidden = YES;
  114. self.BallHat.hidden = YES;
  115. self.Rectangle.hidden = NO;
  116. self.Cylinder.hidden = NO;
  117. self.Split.hidden = NO;
  118. self.dichotomia.hidden = YES;
  119. self.threeR.hidden = NO;
  120. [self.functionBtnArray addObject:self.Ball];
  121. [self.functionBtnArray addObject:self.Rectangle];
  122. [self.functionBtnArray addObject:self.Cylinder];
  123. [self.functionBtnArray addObject:self.Split];
  124. [self.functionBtnArray addObject:self.threeR];
  125. }
  126. //设置360通用的VR界面
  127. -(void)setCommon360VR
  128. {
  129. [self.Ball setBackgroundImage:[UIImage imageNamed:@"VR_Ball_nor"] forState:UIControlStateNormal];
  130. [self.Ball setBackgroundImage:[UIImage imageNamed:@"VR_Ball_sel"] forState:UIControlStateSelected];
  131. //壁挂和天花板
  132. self.war.hidden = NO;
  133. self.ceiling.hidden = NO;
  134. self.war.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 0, 0, buttonHeight, buttonHeight);
  135. self.ceiling.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 1, 0, buttonHeight, buttonHeight);
  136. //球和矩形模式
  137. self.Ball.hidden = NO;
  138. self.Rectangle.hidden = NO;
  139. self.Ball.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 0, buttonHeight, buttonHeight, buttonHeight);
  140. self.Rectangle.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 1, buttonHeight, buttonHeight, buttonHeight);
  141. //碗、帽子、圆柱、四分、二分
  142. self.BallBowl.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 2, buttonHeight, buttonHeight, buttonHeight);
  143. self.BallHat.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 3, buttonHeight, buttonHeight, buttonHeight);
  144. self.Cylinder.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 4, buttonHeight, buttonHeight, buttonHeight);
  145. self.Split.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 5, buttonHeight, buttonHeight, buttonHeight);
  146. self.dichotomia.frame = CGRectMake(buttonHeight*1.5 + buttonHeight * 6, buttonHeight, buttonHeight, buttonHeight);
  147. }
  148. -(void)layoutShort
  149. {
  150. self.BallBowl.hidden = YES;
  151. self.BallHat.hidden = YES;
  152. self.Cylinder.hidden = YES;
  153. self.Split.hidden = YES;
  154. self.dichotomia.hidden = YES;
  155. self.threeR.hidden = YES;
  156. }
  157. -(void)layoutLong
  158. {
  159. self.BallBowl.hidden = NO;
  160. self.BallHat.hidden = NO;
  161. self.Cylinder.hidden = NO;
  162. self.Split.hidden = NO;
  163. self.dichotomia.hidden = NO;
  164. self.threeR.hidden = YES;
  165. }
  166. #pragma mark 按钮响应的方法 以下两个方法用于显示不同的鱼眼显示方式
  167. - (void)chooseCeilingFunction{
  168. //天花板模式
  169. [self layoutLong];
  170. //切换模式之后,默认改为球状
  171. self.VRType = 1;
  172. [self delegateChangeVRMode:Shape_Ball WithWarOrCeiling:self.VRType];
  173. self.ceiling.selected = YES;
  174. self.war.selected = NO;
  175. }
  176. - (void)chooseWarFunction{
  177. //壁挂模式
  178. [self layoutShort];
  179. //切换模式之后,默认改为球状
  180. self.VRType = 2;
  181. [self delegateChangeVRMode:Shape_Ball WithWarOrCeiling:self.VRType];
  182. self.ceiling.selected = NO;
  183. self.war.selected = YES;
  184. }
  185. - (void)removeSelf{
  186. self.hidden = YES;
  187. [self removeFromSuperview];
  188. }
  189. -(void)VRModeChange:(id)sender
  190. {
  191. UIButton *VRBtn = (UIButton*)sender;
  192. [self delegateChangeVRMode:(_XMVRShape)VRBtn.tag WithWarOrCeiling:self.VRType];
  193. }
  194. -(void)delegateChangeVRMode:(_XMVRShape)type WithWarOrCeiling:(int)model
  195. {
  196. [self setSelectVR:type];
  197. //调用代理改变VR模式
  198. if ([self.delegate respondsToSelector:@selector(changeVRFunctionMode: WithWarOrCeiling:)]) {
  199. [self.delegate changeVRFunctionMode:type WithWarOrCeiling:model];
  200. }
  201. }
  202. #pragma mark - lazyLoad 各个控件的加载
  203. -(UIView *)menuView
  204. {
  205. if (!_menuView) {
  206. _menuView = [[UIView alloc]init];
  207. _menuView.backgroundColor = [UIColor redColor];
  208. _menuView.alpha = 0.6;
  209. _menuView.hidden = YES;
  210. }
  211. return _menuView;
  212. }
  213. -(UIView *)modeView
  214. {
  215. if (!_modeView) {
  216. _modeView = [[UIView alloc]init];
  217. _modeView.backgroundColor = [UIColor blueColor];
  218. _modeView.alpha = 0.6;
  219. _modeView.layer.cornerRadius = 15;
  220. }
  221. return _modeView;
  222. }
  223. #pragma mark - modeView的按钮
  224. -(UIButton *)closeMode
  225. {
  226. if (!_closeMode) {
  227. _closeMode = [[UIButton alloc]init];
  228. [_closeMode setBackgroundImage:[UIImage imageNamed:@"VR-close_nor"] forState:UIControlStateNormal];
  229. [_closeMode setBackgroundImage:[UIImage imageNamed:@"VR-close_nor"] forState:UIControlStateSelected];
  230. [_closeMode addTarget:self action:@selector(removeSelf) forControlEvents:UIControlEventTouchUpInside];
  231. }
  232. return _closeMode;
  233. }
  234. #pragma mark - menuView的按钮
  235. -(UIButton *)ceiling
  236. {
  237. if (!_ceiling) {
  238. _ceiling = [[UIButton alloc]init];
  239. [_ceiling setBackgroundImage:[UIImage imageNamed:@"VR-Ceiling_nor"] forState:UIControlStateNormal];
  240. [_ceiling setBackgroundImage:[UIImage imageNamed:@"VR-Ceiling_sel"] forState:UIControlStateSelected];
  241. [_ceiling addTarget:self action:@selector(chooseCeilingFunction) forControlEvents:UIControlEventTouchUpInside];
  242. _ceiling.tag = 101;
  243. }
  244. return _ceiling;
  245. }
  246. -(UIButton *)war
  247. {
  248. if (!_war) {
  249. _war = [[UIButton alloc]init];
  250. [_war setBackgroundImage:[UIImage imageNamed:@"VR_Wall_nor"] forState:UIControlStateNormal];
  251. [_war setBackgroundImage:[UIImage imageNamed:@"VR_Wall_sel"] forState:UIControlStateSelected];
  252. [_war addTarget:self action:@selector(chooseWarFunction) forControlEvents:UIControlEventTouchUpInside];
  253. _war.tag = 100;
  254. }
  255. return _war;
  256. }
  257. -(UIButton *)Cylinder
  258. {
  259. if (!_Cylinder) {
  260. _Cylinder = [[UIButton alloc]init];
  261. [_Cylinder setBackgroundImage:[UIImage imageNamed:@"VR-cylinder_nor"] forState:UIControlStateNormal];
  262. [_Cylinder setBackgroundImage:[UIImage imageNamed:@"VR-cylinder_sel"] forState:UIControlStateSelected];
  263. _Cylinder.tag = Shape_Cylinder;
  264. [_Cylinder addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  265. }
  266. return _Cylinder;
  267. }
  268. -(UIButton *)Ball
  269. {
  270. if (!_Ball) {
  271. _Ball = [[UIButton alloc]init];
  272. [_Ball setBackgroundImage:[UIImage imageNamed:@"VR_Ball_nor"] forState:UIControlStateNormal];
  273. [_Ball setBackgroundImage:[UIImage imageNamed:@"VR_Ball_sel"] forState:UIControlStateSelected];
  274. _Ball.tag = Shape_Ball;
  275. [_Ball addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  276. }
  277. return _Ball;
  278. }
  279. -(UIButton *)BallBowl
  280. {
  281. if (!_BallBowl) {
  282. _BallBowl = [[UIButton alloc]init];
  283. [_BallBowl setBackgroundImage:[UIImage imageNamed:@"VR-ball bowl_nor"] forState:UIControlStateNormal];
  284. [_BallBowl setBackgroundImage:[UIImage imageNamed:@"VR-ball bowl_sel"] forState:UIControlStateSelected];
  285. _BallBowl.tag = Shape_Ball_Bowl;
  286. [_BallBowl addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  287. }
  288. return _BallBowl;
  289. }
  290. -(UIButton *)BallHat {
  291. if (!_BallHat) {
  292. _BallHat = [[UIButton alloc]init];
  293. [_BallHat setBackgroundImage:[UIImage imageNamed:@"VR_ball hat_nor"] forState:UIControlStateNormal];
  294. [_BallHat setBackgroundImage:[UIImage imageNamed:@"VR_ball hat_sel"] forState:UIControlStateSelected];
  295. _BallHat.tag = Shape_Ball_Hat;
  296. [_BallHat addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  297. }
  298. return _BallHat;
  299. }
  300. -(UIButton *)Rectangle
  301. {
  302. if (!_Rectangle) {
  303. _Rectangle = [[UIButton alloc]init];
  304. [_Rectangle setBackgroundImage:[UIImage imageNamed:@"VR-rectangle_nor"] forState:UIControlStateNormal];
  305. [_Rectangle setBackgroundImage:[UIImage imageNamed:@"VR-rectangle_sel"] forState:UIControlStateSelected];
  306. _Rectangle.tag = Shape_Rectangle;
  307. [_Rectangle addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  308. }
  309. return _Rectangle;
  310. }
  311. -(UIButton *)Split
  312. {
  313. if (!_Split) {
  314. _Split = [[UIButton alloc]init];
  315. [_Split setBackgroundImage:[UIImage imageNamed:@"VR-four_nor"] forState:UIControlStateNormal];
  316. [_Split setBackgroundImage:[UIImage imageNamed:@"VR-four_sel"] forState:UIControlStateSelected];
  317. _Split.tag = Shape_Grid_4R;
  318. [_Split addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  319. }
  320. return _Split;
  321. }
  322. -(UIButton *)dichotomia
  323. {
  324. if (!_dichotomia) {
  325. _dichotomia = [[UIButton alloc]init];
  326. [_dichotomia setBackgroundImage:[UIImage imageNamed:@"VR-tow_nor.png"] forState:UIControlStateNormal];
  327. [_dichotomia setBackgroundImage:[UIImage imageNamed:@"VR-tow_sel.png"] forState:UIControlStateSelected];
  328. _dichotomia.tag = Shape_Rectangle_2R;
  329. [_dichotomia addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  330. }
  331. return _dichotomia;
  332. }
  333. -(UIButton *)threeR
  334. {
  335. if (!_threeR) {
  336. _threeR = [[UIButton alloc]init];
  337. [_threeR setBackgroundImage:[UIImage imageNamed:@"180_3R_nor.png"] forState:UIControlStateNormal];
  338. [_threeR setBackgroundImage:[UIImage imageNamed:@"180_3R_sel.png"] forState:UIControlStateSelected];
  339. _threeR.tag = Shape_Grid_3R;
  340. [_threeR addTarget:self action:@selector(VRModeChange:) forControlEvents:UIControlEventTouchUpInside];
  341. }
  342. return _threeR;
  343. }
  344. -(void)refreshShapeBtnSelectState{
  345. for (UIButton *btn in self.subviews) {
  346. if ([btn isKindOfClass:[UIButton class]] && btn.tag !=100 &&btn.tag !=101) {
  347. btn.selected = NO;
  348. }
  349. }
  350. if (self.Ball) {
  351. self.Ball.selected = YES;
  352. }
  353. }
  354. @end