FUAPIDemoBar.m 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. //
  2. // FUDemoBar.m
  3. // FUAPIDemoBar
  4. //
  5. // Created by L on 2018/6/26.
  6. // Copyright © 2018年 L. All rights reserved.
  7. //
  8. #import "FUAPIDemoBar.h"
  9. #import "FUFilterView.h"
  10. #import "FUSlider.h"
  11. #import "FUBeautyView.h"
  12. #import "MJExtension.h"
  13. #import "FUSquareButton.h"
  14. #import "FUManager.h"
  15. #import "SVProgressHUD.h"
  16. @interface FUAPIDemoBar ()<FUFilterViewDelegate, FUBeautyViewDelegate>
  17. @property (weak, nonatomic) IBOutlet UIButton *skinBtn;
  18. @property (weak, nonatomic) IBOutlet UIButton *shapeBtn;
  19. @property (weak, nonatomic) IBOutlet UIButton *beautyFilterBtn;
  20. // 滤镜页
  21. @property (weak, nonatomic) IBOutlet FUFilterView *filterView;
  22. // 美颜滤镜页
  23. @property (weak, nonatomic) IBOutlet FUFilterView *beautyFilterView;
  24. /* 格式 */
  25. @property (weak, nonatomic) IBOutlet FUBeautyView *mStyleView;
  26. @property (weak, nonatomic) IBOutlet FUSlider *beautySlider;
  27. // 美型页
  28. @property (weak, nonatomic) IBOutlet FUBeautyView *shapeView;
  29. // 美肤页
  30. @property (weak, nonatomic) IBOutlet FUBeautyView *skinView;
  31. @property (weak, nonatomic) IBOutlet FUSquareButton *mRestBtn;
  32. @property (weak, nonatomic) IBOutlet UIView *sqLine;
  33. /* 当前选中参数 */
  34. @property (strong, nonatomic) FUBeautyParam *seletedParam;
  35. @property (assign, nonatomic) BOOL isEnble;
  36. @end
  37. @implementation FUAPIDemoBar
  38. -(instancetype)initWithFrame:(CGRect)frame {
  39. self = [super initWithFrame:frame];
  40. if (self) {
  41. self.backgroundColor = [UIColor colorWithRed:5/255.0 green:15/255.0 blue:20/255.0 alpha:0.74];
  42. NSBundle *bundle = [NSBundle bundleForClass:[FUAPIDemoBar class]];
  43. self = (FUAPIDemoBar *)[bundle loadNibNamed:@"FUAPIDemoBar" owner:self options:nil].firstObject;
  44. }
  45. return self ;
  46. }
  47. -(void)awakeFromNib {
  48. [super awakeFromNib];
  49. self.filterView.type = FUFilterViewTypeFilter ;
  50. self.filterView.mDelegate = self ;
  51. self.beautyFilterView.type = FUFilterViewTypeBeautyFilter ;
  52. self.beautyFilterView.mDelegate = self ;
  53. self.shapeView.mDelegate = self ;
  54. self.skinView.mDelegate = self;
  55. self.mStyleView.mDelegate = self;
  56. [self.skinBtn setTitle:@"美肤" forState:UIControlStateNormal];
  57. [self.shapeBtn setTitle:@"美型" forState:UIControlStateNormal];
  58. [self.beautyFilterBtn setTitle:@"滤镜" forState:UIControlStateNormal];
  59. [self.mRestBtn setTitle:@"恢复" forState:UIControlStateNormal];
  60. self.skinBtn.tag = 100;
  61. self.shapeBtn.tag = 101;
  62. self.beautyFilterBtn.tag = 102 ;
  63. _isEnble = YES;
  64. }
  65. -(void)layoutSubviews{
  66. [super layoutSubviews];
  67. }
  68. - (IBAction)bottomBtnsSelected:(UIButton *)sender {
  69. if (!_isEnble) {
  70. if(sender == _skinBtn){
  71. [self showMessage:[NSString stringWithFormat:@"使用%@先取消“风格推荐”",@"美肤"]];
  72. }
  73. if (sender == _shapeBtn) {
  74. [self showMessage:[NSString stringWithFormat:@"使用%@先取消“风格推荐”",@"美型"]];
  75. }
  76. if (sender == _beautyFilterBtn) {
  77. [self showMessage:[NSString stringWithFormat:@"使用%@先取消“风格推荐”",@"滤镜"]];
  78. }
  79. return;
  80. }
  81. if (sender.selected) {
  82. sender.selected = NO ;
  83. [self hiddenTopViewWithAnimation:YES];
  84. return ;
  85. }
  86. _selBottomIndex = (int)sender.tag - 100;
  87. self.skinBtn.selected = NO;
  88. self.shapeBtn.selected = NO;
  89. self.beautyFilterBtn.selected = NO;
  90. sender.selected = YES;
  91. self.skinView.hidden = !self.skinBtn.selected ;
  92. self.shapeView.hidden = !self.shapeBtn.selected ;
  93. self.beautyFilterView.hidden = !self.beautyFilterBtn.selected ;
  94. // self.filterView.hidden = !self.filterBtn.selected ;
  95. // 美型页面
  96. [self setRestBtnHidden:YES];
  97. if (self.shapeBtn.selected) {
  98. /* 修改当前UI */
  99. [self setRestBtnHidden:NO];
  100. [self sliderChangeEnd:nil];
  101. NSInteger selectedIndex = self.shapeView.selectedIndex;
  102. self.beautySlider.hidden = selectedIndex < 0 ;
  103. if (selectedIndex >= 0) {
  104. FUBeautyParam *modle = self.shapeView.dataArray[selectedIndex];
  105. _seletedParam = modle;
  106. self.beautySlider.value = modle.mValue;
  107. }
  108. }
  109. if (self.skinBtn.selected) {
  110. NSInteger selectedIndex = self.skinView.selectedIndex;
  111. [self setRestBtnHidden:NO];
  112. [self sliderChangeEnd:nil];
  113. self.beautySlider.hidden = selectedIndex < 0 ;
  114. if (selectedIndex >= 0) {
  115. FUBeautyParam *modle = self.skinView.dataArray[selectedIndex];
  116. _seletedParam = modle;
  117. self.beautySlider.value = modle.mValue;
  118. }
  119. }
  120. // slider 是否显示
  121. if (self.beautyFilterBtn.selected) {
  122. NSInteger selectedIndex = self.beautyFilterView.selectedIndex ;
  123. self.beautySlider.type = FUFilterSliderType01 ;
  124. self.beautySlider.hidden = selectedIndex <= 0;
  125. if (selectedIndex >= 0) {
  126. FUBeautyParam *modle = self.beautyFilterView.filters[selectedIndex];
  127. _seletedParam = modle;
  128. self.beautySlider.value = modle.mValue;
  129. }
  130. }
  131. [self showTopViewWithAnimation:self.topView.isHidden];
  132. [self setSliderTyep:_seletedParam];
  133. }
  134. -(void)setSliderTyep:(FUBeautyParam *)param{
  135. if (param.iSStyle101) {
  136. self.beautySlider.type = FUFilterSliderType101;
  137. }else{
  138. self.beautySlider.type = FUFilterSliderType01 ;
  139. }
  140. }
  141. -(void)setSelBottomIndex:(int)selBottomIndex{
  142. _selBottomIndex = selBottomIndex;
  143. if (selBottomIndex < 4 && selBottomIndex >= 0) {
  144. [self bottomBtnsSelected:[self viewWithTag:100+selBottomIndex]];
  145. }
  146. }
  147. // 开启上半部分
  148. - (void)showTopViewWithAnimation:(BOOL)animation {
  149. if (animation) {
  150. self.topView.alpha = 0.0 ;
  151. self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ;
  152. self.topView.hidden = NO ;
  153. [UIView animateWithDuration:0.35 animations:^{
  154. self.topView.transform = CGAffineTransformIdentity ;
  155. self.topView.alpha = 1.0 ;
  156. }];
  157. if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) {
  158. [self.mDelegate showTopView:YES];
  159. }
  160. }else {
  161. self.topView.transform = CGAffineTransformIdentity ;
  162. self.topView.alpha = 1.0 ;
  163. }
  164. }
  165. // 关闭上半部分
  166. -(void)hiddenTopViewWithAnimation:(BOOL)animation {
  167. if (self.topView.hidden) {
  168. return ;
  169. }
  170. if (animation) {
  171. self.topView.alpha = 1.0 ;
  172. self.topView.transform = CGAffineTransformIdentity ;
  173. self.topView.hidden = NO ;
  174. [UIView animateWithDuration:0.35 animations:^{
  175. self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ;
  176. self.topView.alpha = 0.0 ;
  177. }completion:^(BOOL finished) {
  178. self.topView.hidden = YES ;
  179. self.topView.alpha = 1.0 ;
  180. self.topView.transform = CGAffineTransformIdentity ;
  181. self.skinBtn.selected = NO ;
  182. self.shapeBtn.selected = NO ;
  183. self.beautyFilterBtn.selected = NO ;
  184. }];
  185. if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) {
  186. [self.mDelegate showTopView:NO];
  187. }
  188. }else {
  189. self.topView.hidden = YES ;
  190. self.topView.alpha = 1.0 ;
  191. self.topView.transform = CGAffineTransformIdentity ;
  192. }
  193. }
  194. #pragma mark - 恢复默认参数逻辑
  195. - (IBAction)clickRestBtn:(id)sender {
  196. if ([[FUManager shareManager] isDefaultShapeValue] && self.shapeBtn.selected) {
  197. return;
  198. }
  199. if ([[FUManager shareManager] isDefaultSkinValue] && self.skinBtn.selected) {
  200. return;
  201. }
  202. [self restBeautyDefaultValue];
  203. }
  204. -(void)setRestBtnHidden:(BOOL)hiddle{
  205. _mRestBtn.hidden = hiddle;
  206. _sqLine.hidden = hiddle;
  207. }
  208. -(void)restBeautyDefaultValue{
  209. // UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:@"是否将所有参数恢复到默认值" preferredStyle:UIAlertControllerStyleAlert];
  210. //
  211. // UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  212. // }];
  213. // [cancleAction setValue:[UIColor colorWithRed:44/255.0 green:46/255.0 blue:48/255.0 alpha:1.0] forKey:@"titleTextColor"];
  214. //
  215. // UIAlertAction *certainAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  216. self.mRestBtn.alpha = 0.7;
  217. if ([self.mDelegate respondsToSelector:@selector(restDefaultValue:)]) {
  218. if (self.skinBtn.selected) {
  219. [self.mDelegate restDefaultValue:1];
  220. [self.skinView reloadData];
  221. if (!self.beautySlider.hidden && self.skinView.selectedIndex >= 0) {
  222. FUBeautyParam *param = self.skinView.dataArray[self.skinView.selectedIndex];
  223. self.beautySlider.value = param.mValue;
  224. }
  225. }
  226. if (self.shapeBtn.selected) {
  227. [self.mDelegate restDefaultValue:2];
  228. [self.shapeView reloadData];
  229. if (!self.beautySlider.hidden && self.shapeView.selectedIndex >= 0) {
  230. FUBeautyParam *param = self.shapeView.dataArray[self.shapeView.selectedIndex];
  231. self.beautySlider.value = param.mValue;
  232. }
  233. }
  234. }
  235. // }];
  236. // [certainAction setValue:[UIColor colorWithRed:31/255.0 green:178/255.0 blue:255/255.0 alpha:1.0] forKey:@"titleTextColor"];
  237. //
  238. // [alertCon addAction:cancleAction];
  239. // [alertCon addAction:certainAction];
  240. //
  241. // [[self viewControllerFromView:self] presentViewController:alertCon animated:YES completion:^{
  242. // }];
  243. }
  244. - (UIViewController *)viewControllerFromView:(UIView *)view {
  245. for (UIView *next = [view superview]; next; next = next.superview) {
  246. UIResponder *nextResponder = [next nextResponder];
  247. if ([nextResponder isKindOfClass:[UIViewController class]]) {
  248. return (UIViewController *)nextResponder;
  249. }
  250. }
  251. return nil;
  252. }
  253. #pragma mark ---- FUFilterViewDelegate
  254. // 开启滤镜
  255. -(void)filterViewDidSelectedFilter:(FUBeautyParam *)param{
  256. _seletedParam = param;
  257. if (_beautyFilterView.selectedIndex > 0 && _beautyFilterBtn.selected) {
  258. self.beautySlider.value = param.mValue;
  259. self.beautySlider.hidden = NO;
  260. [self setSliderTyep:_seletedParam];
  261. }else{
  262. self.beautySlider.hidden = YES;
  263. }
  264. if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(filterShowMessage:)]) {
  265. [self.mDelegate filterShowMessage:param.mTitle];
  266. }
  267. if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
  268. [_mDelegate filterValueChange:_seletedParam];
  269. }
  270. }
  271. -(void)beautyCollectionView:(FUBeautyView *)beautyView didSelectedParam:(FUBeautyParam *)param{
  272. if (beautyView == _mStyleView) {
  273. self.beautySlider.hidden = YES;
  274. if (_mDelegate && [_mDelegate respondsToSelector:@selector(beautyParamValueChange:)]) {
  275. [_mDelegate beautyParamValueChange:param];
  276. }
  277. [self changeBottomView];
  278. return;
  279. }
  280. _seletedParam = param;
  281. self.beautySlider.value = param.mValue;
  282. self.beautySlider.hidden = NO;
  283. [self setSliderTyep:_seletedParam];
  284. }
  285. -(void)changeBottomView{
  286. if (_mStyleView.selectedIndex == 0) {
  287. self.shapeBtn.alpha = 1.0;
  288. self.skinBtn.alpha = 1.0;
  289. self.beautyFilterBtn.alpha = 1.0;
  290. _isEnble = YES;
  291. }else{
  292. self.shapeBtn.alpha = 0.6;
  293. self.skinBtn.alpha = 0.6;
  294. self.beautyFilterBtn.alpha = 0.6;
  295. _isEnble = NO;
  296. }
  297. }
  298. // 滑条滑动
  299. - (IBAction)filterSliderValueChange:(FUSlider *)sender {
  300. _seletedParam.mValue = sender.value;
  301. if (_beautyFilterBtn.selected) {
  302. if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
  303. [_mDelegate filterValueChange:_seletedParam];
  304. }
  305. }else{
  306. if (_mDelegate && [_mDelegate respondsToSelector:@selector(beautyParamValueChange:)]) {
  307. [_mDelegate beautyParamValueChange:_seletedParam];
  308. }
  309. }
  310. }
  311. - (IBAction)sliderChangeEnd:(FUSlider *)sender {
  312. if (self.shapeBtn.selected) {
  313. if ([[FUManager shareManager] isDefaultShapeValue]) {
  314. self.mRestBtn.alpha = 0.7;
  315. }else{
  316. self.mRestBtn.alpha = 1.0;
  317. }
  318. [self.shapeView reloadData];
  319. }
  320. if (self.skinBtn.selected) {
  321. if ([[FUManager shareManager] isDefaultSkinValue]) {
  322. self.mRestBtn.alpha = 0.7;
  323. }else{
  324. self.mRestBtn.alpha = 1.0;
  325. }
  326. [self.skinView reloadData];
  327. }
  328. [self.filterView reloadData];
  329. }
  330. -(void)reloadSkinView:(NSArray<FUBeautyParam *> *)skinParams{
  331. _skinView.dataArray = skinParams;
  332. _skinView.selectedIndex = 0;
  333. // FUBeautyParam *modle = skinParams[0];
  334. // if (modle) {
  335. // _beautySlider.hidden = NO;
  336. // _beautySlider.value = modle.mValue;
  337. // }
  338. [_skinView reloadData];
  339. }
  340. -(void)reloadShapView:(NSArray<FUBeautyParam *> *)shapParams{
  341. _shapeView.dataArray = shapParams;
  342. _shapeView.selectedIndex = 1;
  343. [_shapeView reloadData];
  344. }
  345. -(void)reloadFilterView:(NSArray<FUBeautyParam *> *)filterParams{
  346. _beautyFilterView.filters = filterParams;
  347. [_beautyFilterView reloadData];
  348. }
  349. -(void)reloadStyleView:(NSArray<FUBeautyParam *> *)styleParams defaultStyle:(FUBeautyParam *)selStyle{
  350. _mStyleView.dataArray = styleParams;
  351. if (selStyle) {
  352. int indexa = (int)[styleParams indexOfObject:selStyle];
  353. [self.mStyleView setSelectedIndex:indexa];
  354. [self changeBottomView];
  355. }else{
  356. [self.mStyleView setSelectedIndex:0];
  357. }
  358. [_mStyleView reloadData];
  359. }
  360. -(void)setDefaultFilter:(FUBeautyParam *)filter{
  361. [self.beautyFilterView setDefaultFilter:filter];
  362. }
  363. -(BOOL)isTopViewShow {
  364. return !self.topView.hidden ;
  365. }
  366. - (void)showMessage:(NSString *)string{
  367. //[SVProgressHUD showWithStatus:string]; //设置需要显示的文字
  368. [SVProgressHUD showImage:[UIImage imageNamed:@"wrt424erte2342rx"] status:string];
  369. [SVProgressHUD setDefaultAnimationType:SVProgressHUDAnimationTypeNative];
  370. // [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeCustom]; //设置HUD背景图层的样式
  371. [SVProgressHUD setForegroundColor:[UIColor whiteColor]];
  372. [SVProgressHUD setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.74]];
  373. [SVProgressHUD setBackgroundLayerColor:[UIColor clearColor]];
  374. [SVProgressHUD setCornerRadius:5];
  375. [SVProgressHUD dismissWithDelay:1.5];
  376. }
  377. -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
  378. }
  379. @end