BGTLiveBeautyView.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. //
  2. // BGTLiveBeautyView.m
  3. // BuguLive
  4. //
  5. // Created by xfg on 2017/2/17.
  6. // Copyright © 2017年 xfg. All rights reserved.
  7. //
  8. #import "BGTLiveBeautyView.h"
  9. #define kBeautyBtnLineNum 3 // 一排n个
  10. #define kBeautyBtnSpace_X 20 // 横向间隔
  11. #define kBeautyBtnSpace_Y 8 // 纵向间隔
  12. #define kBeautyBtnHeight 30 // 按钮高度
  13. @interface BGTLiveBeautyView()<UIPickerViewDataSource,UIPickerViewDelegate,UIGestureRecognizerDelegate>
  14. {
  15. NSInteger _curEffectIdx;
  16. NSMutableArray *_beautyBtnArray;
  17. NSArray *_beautyBtnNameArray;
  18. float _beautyBtnWidth;
  19. float _beautyBtnContrianerViewHeight;
  20. NSString *_currentBeautyBtnNameStr;
  21. }
  22. @end
  23. @implementation BGTLiveBeautyView
  24. - (id)initWithFrame:(CGRect)frame
  25. {
  26. self = [super initWithFrame:frame];
  27. if (self)
  28. {
  29. _beautyBtnWidth = (frame.size.width - (kBeautyBtnLineNum+1)*kBeautyBtnSpace_X) / kBeautyBtnLineNum;
  30. _beautyBgView = [[UIView alloc]init];
  31. _beautyBgView.backgroundColor = kWhiteColor;
  32. [self addSubview:_beautyBgView];
  33. _beautyBtnContrianerView = [[UIView alloc]init];
  34. _beautyBtnContrianerView.backgroundColor = kWhiteColor;
  35. [_beautyBgView addSubview:_beautyBtnContrianerView];
  36. _beautyBtnArray = [NSMutableArray array];
  37. _beautyBtnNameArray = [NSArray arrayWithObjects:ASLocalizedString(@"关闭美颜"),
  38. ASLocalizedString(@"普通美颜"),
  39. ASLocalizedString(@"浪漫"),
  40. ASLocalizedString(@"清新"),
  41. ASLocalizedString(@"唯美"),
  42. ASLocalizedString(@"粉嫩"),
  43. ASLocalizedString(@"怀旧"),
  44. ASLocalizedString(@"蓝调"),
  45. ASLocalizedString(@"清凉"),
  46. ASLocalizedString(@"日系"),
  47. nil];
  48. if([GlobalVariables sharedInstance].openAgora)
  49. {
  50. _beautyBtnNameArray = [NSArray arrayWithObjects:ASLocalizedString(@"关闭美颜"),ASLocalizedString(@"普通美颜"),
  51. nil];;
  52. }
  53. _beautyBtnContrianerViewHeight = [self createBtn:_beautyBtnNameArray];
  54. _currentBeautyBtnNameStr = [_beautyBtnNameArray firstObject];
  55. _curEffectIdx = 1;
  56. // 修改美颜参数
  57. _filterParam1 = [self addSliderName:ASLocalizedString(@"美颜")From:0 To:100 Init:50];
  58. _filterParam2 = [self addSliderName:ASLocalizedString(@"美白")From:0 To:100 Init:50];
  59. _filterParam3 = [self addSliderName:ASLocalizedString(@"红润")From:0 To:100 Init:50];
  60. _filterParam1.hidden = YES;
  61. _filterParam2.hidden = YES;
  62. _filterParam3.hidden = YES;
  63. if(![GlobalVariables sharedInstance].openAgora)
  64. {
  65. }
  66. UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  67. button.tag = 1;
  68. [self onBtnClick:button];
  69. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapClick:)];
  70. tap.delegate = self;
  71. [self addGestureRecognizer:tap];
  72. }
  73. return self;
  74. }
  75. - (void)layoutUI
  76. {
  77. _beautyBgView.frame = CGRectMake(0, self.frame.size.height-_beautyBtnContrianerViewHeight, self.frame.size.width, _beautyBtnContrianerViewHeight);
  78. [self layoutMyCommponent];
  79. }
  80. - (void)layoutMyCommponent
  81. {
  82. _beautyBtnContrianerView.frame = CGRectMake(0, _beautyBgView.frame.size.height - _beautyBtnContrianerViewHeight, _beautyBgView.frame.size.width, _beautyBtnContrianerViewHeight);
  83. CGRect comFrame = _beautyBgView.frame;
  84. _filterParam3.frame = CGRectMake(kDefaultMargin, CGRectGetMinY(_beautyBtnContrianerView.frame)-40, comFrame.size.width-kDefaultMargin*2, 35);
  85. _filterParam2.frame = CGRectMake(kDefaultMargin, CGRectGetMinY(_filterParam3.frame)-40, comFrame.size.width-kDefaultMargin*2, 35);
  86. _filterParam1.frame = CGRectMake(kDefaultMargin, CGRectGetMinY(_filterParam2.frame)-40, comFrame.size.width-kDefaultMargin*2, 35);
  87. }
  88. #pragma mark - ----------------------- 切换美颜 -----------------------
  89. - (void)onBtnClick:(id)sender
  90. {
  91. UIButton *btn = (UIButton *)sender;
  92. _currentBeautyBtnNameStr = _beautyBtnNameArray[btn.tag];
  93. [self setCurrentBeautyBtnColor:btn.tag];
  94. _filterParam1.hidden = NO;
  95. _filterParam2.hidden = NO;
  96. _filterParam3.hidden = NO;
  97. NSString* lookupFileName = @"";
  98. if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"关闭美颜")])
  99. {
  100. [self layoutUI];
  101. }
  102. else
  103. {
  104. _beautyBgView.frame = CGRectMake(0, self.frame.size.height-(_beautyBtnContrianerViewHeight+80+40), self.frame.size.width, _beautyBtnContrianerViewHeight+80 + 40);
  105. [self layoutMyCommponent];
  106. }
  107. if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"关闭美颜")])
  108. {
  109. _filterParam1.hidden = YES;
  110. _filterParam2.hidden = YES;
  111. _filterParam3.hidden = YES;
  112. }
  113. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"普通美颜")])
  114. {
  115. lookupFileName = ASLocalizedString(@"普通美颜");
  116. }
  117. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"浪漫")])
  118. {
  119. lookupFileName = @"langman.png";
  120. }
  121. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"清新")])
  122. {
  123. lookupFileName = @"qingxin.png";
  124. }
  125. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"唯美")])
  126. {
  127. lookupFileName = @"weimei.png";
  128. }
  129. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"粉嫩")])
  130. {
  131. lookupFileName = @"fennen.png";
  132. }
  133. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"怀旧")])
  134. {
  135. lookupFileName = @"huaijiu.png";
  136. }
  137. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"蓝调")])
  138. {
  139. lookupFileName = @"landiao.png";
  140. }
  141. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"清凉")])
  142. {
  143. lookupFileName = @"qingliang.png";
  144. }
  145. else if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"日系")])
  146. {
  147. lookupFileName = @"rixi.png";
  148. }
  149. if (_delegate && [_delegate respondsToSelector:@selector(setBeauty:withBeautyName:)])
  150. {
  151. [_delegate setBeauty:self withBeautyName:lookupFileName];
  152. }
  153. }
  154. - (void)onSlider:(id)sender
  155. {
  156. if (sender != _filterParam1 &&
  157. sender != _filterParam2 && sender != _filterParam3)
  158. {
  159. return;
  160. }
  161. if ([_currentBeautyBtnNameStr isEqualToString:ASLocalizedString(@"关闭美颜")])
  162. {
  163. _filterParam1.slider.value = 0;
  164. _filterParam2.slider.value = 0;
  165. _filterParam3.slider.value = 0;
  166. }
  167. if (_delegate && [_delegate respondsToSelector:@selector(setBeautyValue:)])
  168. {
  169. [_delegate setBeautyValue:self];
  170. }
  171. }
  172. #pragma mark - ----------------------- UI -----------------------
  173. - (float)createBtn:(NSArray *)arrayList
  174. {
  175. CGFloat btn_x = kBeautyBtnSpace_X;
  176. CGFloat btn_y = kBeautyBtnSpace_Y;
  177. for(int i=0; i < [arrayList count]; i ++)
  178. {
  179. UIButton *btn = [self addButton:arrayList[i]];
  180. btn.tag = i;
  181. btn.frame = CGRectMake(btn_x, btn_y, _beautyBtnWidth, kBeautyBtnHeight);
  182. //计算下一个按钮的位置
  183. if (i < [arrayList count]-1)
  184. { //判断是否有下一个按钮
  185. //列
  186. if (self.frame.size.width - (btn_x + _beautyBtnWidth) < _beautyBtnWidth)
  187. {
  188. //换行
  189. btn_x = kBeautyBtnSpace_X;
  190. btn_y = btn_y + kBeautyBtnHeight + kBeautyBtnSpace_Y;
  191. }
  192. else
  193. {
  194. btn_x = btn_x + _beautyBtnWidth + kBeautyBtnSpace_X;
  195. }
  196. }
  197. [_beautyBtnArray addObject:btn];
  198. }
  199. return btn_y + kBeautyBtnHeight + kBeautyBtnSpace_Y;
  200. }
  201. #pragma mark 设置选中btn的颜色
  202. - (void)setCurrentBeautyBtnColor:(NSInteger)btnTag
  203. {
  204. for (UIButton *tmpBtn in _beautyBtnArray)
  205. {
  206. if (tmpBtn.tag == btnTag)
  207. {
  208. [tmpBtn setTitleColor:kAppGrayColor1 forState:UIControlStateNormal];
  209. tmpBtn.layer.borderColor = [kAppGrayColor1 CGColor];
  210. }
  211. else
  212. {
  213. [tmpBtn setTitleColor:kAppGrayColor3 forState:UIControlStateNormal];
  214. tmpBtn.layer.borderColor = [kAppGrayColor3 CGColor];
  215. }
  216. }
  217. }
  218. - (BGNameSlider *)addSliderName: (NSString*) name
  219. From: (float) minV
  220. To: (float) maxV
  221. Init: (float) iniV {
  222. BGNameSlider *sl = [[BGNameSlider alloc] init];
  223. [_beautyBgView addSubview:sl];
  224. sl.slider.minimumValue = minV;
  225. sl.slider.maximumValue = maxV;
  226. sl.slider.value = iniV;
  227. sl.nameL.text = name;
  228. sl.normalValue = (iniV -minV)/maxV;
  229. sl.valueL.text = [NSString stringWithFormat:@"%d", (int)iniV];
  230. if (iniV <2){
  231. sl.precision = 2;
  232. }
  233. [sl.slider addTarget:self action:@selector(onSlider:) forControlEvents:UIControlEventValueChanged ];
  234. __weak typeof(self) ws = self;
  235. sl.onSliderBlock = ^(id sender){
  236. [ws onSlider:sender];
  237. };
  238. return sl;
  239. }
  240. - (UILabel *)addLable:(NSString*)title
  241. {
  242. UILabel * lbl = [[UILabel alloc] init];
  243. lbl.text = title;
  244. [_beautyBgView addSubview:lbl];
  245. lbl.backgroundColor = [UIColor colorWithWhite:0.8 alpha:0.3];
  246. return lbl;
  247. }
  248. - (UIButton *)newButton:(NSString*)title
  249. {
  250. UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  251. [button setTitle: title forState: UIControlStateNormal];
  252. [button setTitleColor:kAppGrayColor2 forState:UIControlStateNormal];
  253. button.titleLabel.font = kAppMiddleTextFont;
  254. button.backgroundColor = kClearColor;
  255. button.layer.cornerRadius = 5;
  256. button.clipsToBounds = YES;
  257. button.layer.borderWidth = kBorderWidth;
  258. button.layer.borderColor = [kAppGrayColor2 CGColor];
  259. [_beautyBtnContrianerView addSubview:button];
  260. return button;
  261. }
  262. - (UIButton *)addButton:(NSString*)title
  263. {
  264. UIButton * button = [self newButton: title];
  265. [button addTarget:self action:@selector(onBtnClick:) forControlEvents:UIControlEventTouchUpInside];
  266. return button;
  267. }
  268. #pragma mark - load resource from resource bundle
  269. + (NSBundle*)KSYGPUResourceBundle
  270. {
  271. static dispatch_once_t onceToken;
  272. static NSBundle *resBundle = nil;
  273. dispatch_once(&onceToken, ^{
  274. resBundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"KSYGPUResource" withExtension:@"bundle"]];
  275. });
  276. return resBundle;
  277. }
  278. + (UIImage*)KSYGPUImageNamed:(NSString*)name
  279. {
  280. UIImage *imageFromMainBundle = [UIImage imageNamed:name];
  281. if (imageFromMainBundle)
  282. {
  283. return imageFromMainBundle;
  284. }
  285. UIImage *imageFromKSYBundle = [UIImage imageWithContentsOfFile:[[[BGTLiveBeautyView KSYGPUResourceBundle] resourcePath] stringByAppendingPathComponent:name]];
  286. return imageFromKSYBundle;
  287. }
  288. #pragma mark - ----------------------- 手势 -----------------------
  289. - (void)tapClick:(UITapGestureRecognizer *)tap
  290. {
  291. self.hidden = YES;
  292. }
  293. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
  294. {
  295. if ([touch.view isDescendantOfView:_beautyBgView])
  296. {
  297. return NO;
  298. }
  299. return YES;
  300. }
  301. @end