PFAPIDemoBar.m 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. //
  2. // PFDemoBar.m
  3. //
  4. // Created by mumu on 2021/9/6.
  5. //
  6. #import "PFAPIDemoBar.h"
  7. #import "PFFilterView.h"
  8. #import "PFSlider.h"
  9. #import "PFBeautyView.h"
  10. #import "PFBeautyParam.h"
  11. #import "PFDateHandle.h"
  12. @interface PFAPIDemoBar ()<PFFilterViewDelegate, PFBeautyViewDelegate>
  13. @property (weak, nonatomic) IBOutlet UIButton *skinBtn;
  14. @property (weak, nonatomic) IBOutlet UIButton *shapeBtn;
  15. @property (weak, nonatomic) IBOutlet UIButton *beautyFilterBtn;
  16. @property (weak, nonatomic) IBOutlet UIButton *faceTypeBtn;
  17. @property (weak, nonatomic) IBOutlet UIButton *comparisonButton;
  18. @property (weak, nonatomic) IBOutlet UIButton *stickersBtn;
  19. // 上半部分
  20. @property (weak, nonatomic) IBOutlet UIView *topView;
  21. // 滤镜页
  22. @property (weak, nonatomic) IBOutlet PFFilterView *faceTypeView;
  23. // 美颜滤镜页
  24. @property (weak, nonatomic) IBOutlet PFFilterView *beautyFilterView;
  25. @property (weak, nonatomic) IBOutlet PFFilterView *makeupView;
  26. @property (weak, nonatomic) IBOutlet PFSlider *beautySlider;
  27. @property (weak, nonatomic) IBOutlet PFFilterView *stickersView;
  28. // 美型页
  29. @property (weak, nonatomic) IBOutlet PFBeautyView *shapeView;
  30. // 美肤页
  31. @property (weak, nonatomic) IBOutlet PFBeautyView *skinView;
  32. /* 当前选中参数 */
  33. @property (strong, nonatomic) PFBeautyParam *seletedParam;
  34. @end
  35. @implementation PFAPIDemoBar
  36. -(instancetype)initWithFrame:(CGRect)frame {
  37. self = [super initWithFrame:frame];
  38. if (self) {self.backgroundColor = [UIColor clearColor];
  39. self.backgroundColor = [UIColor clearColor];
  40. NSBundle *bundle = [NSBundle bundleForClass:[PFAPIDemoBar class]];
  41. self = (PFAPIDemoBar *)[bundle loadNibNamed:@"PFAPIDemoBar" owner:self options:nil].firstObject;
  42. self.frame = frame;
  43. }
  44. return self ;
  45. }
  46. -(void)awakeFromNib {
  47. [super awakeFromNib];
  48. [self setupDate];
  49. [self reloadShapView:_shapeParams];
  50. [self reloadSkinView:_skinParams];
  51. [self reloadFilterView:_filtersParams];
  52. _makeupView.filters = _makeupParams;
  53. [_makeupView setDefaultFilter:_makeupParams[0]];
  54. [_makeupView reloadData];
  55. _faceTypeView.filters = _faceTypeParams;
  56. [_faceTypeView setDefaultFilter:_faceTypeParams[0]];
  57. [_faceTypeView reloadData];
  58. _stickersView.filters = _stickersParams;
  59. [_stickersView setDefaultFilter:_stickersParams[0]];
  60. [_stickersView reloadData];
  61. self.faceTypeView.mDelegate = self ;
  62. self.makeupView.mDelegate = self;
  63. self.beautyFilterView.mDelegate = self ;
  64. self.stickersView.mDelegate = self;
  65. self.shapeView.mDelegate = self ;
  66. self.skinView.mDelegate = self;
  67. [self.skinBtn setTitle:NSLocalizedString(@"美肤", nil) forState:UIControlStateNormal];
  68. [self.shapeBtn setTitle:NSLocalizedString(@"美型", nil) forState:UIControlStateNormal];
  69. [self.beautyFilterBtn setTitle:NSLocalizedString(@"滤镜", nil) forState:UIControlStateNormal];
  70. self.faceTypeBtn.tag = 101;
  71. self.skinBtn.tag = 102;
  72. self.shapeBtn.tag = 103;
  73. self.beautyFilterBtn.tag = 104 ;
  74. self.stickersBtn.tag = 106;
  75. self.comparisonButton.tag = 101;
  76. [self.comparisonButton setImage:[UIImage imageNamed:@"comparison_icon"] forState:UIControlStateNormal];
  77. [self.comparisonButton setImage:[UIImage imageNamed:@"comparison_icon"] forState:UIControlStateSelected];
  78. [self.comparisonButton addTarget:self action:@selector(onBtnCompareTouchDown:) forControlEvents:UIControlEventTouchDown];
  79. [self.comparisonButton addTarget:self action:@selector(onBtnCompareTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
  80. self.comparisonButton.hidden = YES;
  81. }
  82. -(void)setupDate{
  83. _filtersParams = [PFDateHandle setupFilterData];
  84. _shapeParams = [PFDateHandle setupShapData];
  85. _skinParams = [PFDateHandle setupSkinData];
  86. _faceTypeParams = [PFDateHandle setupFaceType];
  87. // _makeupParams = [PFDateHandle setupMakeupData];
  88. _stickersParams = [PFDateHandle setupStickers];
  89. }
  90. -(void)updateDemoBar{
  91. _faceTypeView.filters = _faceTypeParams;
  92. [_faceTypeView reloadData];
  93. _beautyFilterView.filters = _filtersParams;
  94. [_beautyFilterView reloadData];
  95. _stickersView.filters = _stickersParams;
  96. [_stickersView reloadData];
  97. _shapeView.dataArray = _shapeParams;
  98. [_shapeView reloadData];
  99. // 美肤页
  100. _skinView.dataArray = _skinParams;
  101. [_skinView reloadData];
  102. }
  103. -(void)layoutSubviews{
  104. [super layoutSubviews];
  105. }
  106. -(void)updateUI:(UIButton *)sender{
  107. self.skinBtn.selected = NO;
  108. self.shapeBtn.selected = NO;
  109. self.beautyFilterBtn.selected = NO;
  110. self.faceTypeBtn.selected = NO;
  111. self.stickersBtn.selected = NO;
  112. self.skinView.hidden = YES;
  113. self.shapeView.hidden = YES ;
  114. self.beautyFilterView.hidden = YES;
  115. self.makeupView.hidden = YES;
  116. self.faceTypeView.hidden = YES;
  117. self.stickersView.hidden = YES;
  118. sender.selected = YES;
  119. if (sender == self.skinBtn) {
  120. self.skinView.hidden = NO;
  121. }
  122. if (sender == self.faceTypeBtn) {
  123. self.faceTypeView.hidden = NO;
  124. }
  125. if (sender == self.beautyFilterBtn) {
  126. self.beautyFilterView.hidden = NO;
  127. }
  128. if (sender == self.shapeBtn) {
  129. self.shapeView.hidden = NO;
  130. }
  131. if (sender == self.stickersBtn) {
  132. self.stickersView.hidden = NO;
  133. }
  134. }
  135. - (IBAction)bottomBtnsSelected:(UIButton *)sender {
  136. if (sender.selected) {
  137. sender.selected = NO ;
  138. [self hiddenTopViewWithAnimation:YES];
  139. return ;
  140. }
  141. [self updateUI:sender];
  142. if (self.shapeBtn.selected) {
  143. /* 修改当前UI */
  144. NSInteger selectedIndex = self.shapeView.selectedIndex;
  145. self.beautySlider.hidden = selectedIndex < 0 ;
  146. if (selectedIndex >= 0) {
  147. PFBeautyParam *modle = self.shapeView.dataArray[selectedIndex];
  148. _seletedParam = modle;
  149. self.beautySlider.value = modle.mValue;
  150. }
  151. }
  152. if (self.skinBtn.selected) {
  153. NSInteger selectedIndex = self.skinView.selectedIndex;
  154. self.beautySlider.hidden = selectedIndex < 0 ;
  155. if (selectedIndex >= 0) {
  156. PFBeautyParam *modle = self.skinView.dataArray[selectedIndex];
  157. _seletedParam = modle;
  158. self.beautySlider.value = modle.mValue;
  159. }
  160. }
  161. // slider 是否显示
  162. if (self.beautyFilterBtn.selected) {
  163. NSInteger selectedIndex = self.beautyFilterView.selectedIndex ;
  164. self.beautySlider.type = FUFilterSliderType01 ;
  165. self.beautySlider.hidden = selectedIndex <= 0;
  166. if (selectedIndex >= 0) {
  167. PFBeautyParam *modle = self.beautyFilterView.filters[selectedIndex];
  168. _seletedParam = modle;
  169. self.beautySlider.value = modle.mValue;
  170. }
  171. }
  172. if (self.faceTypeBtn.selected) {
  173. NSInteger selectedIndex = self.faceTypeView.selectedIndex ;
  174. self.beautySlider.hidden = YES;
  175. if (selectedIndex >= 0) {
  176. PFBeautyParam *modle = self.beautyFilterView.filters[selectedIndex];
  177. _seletedParam = modle;
  178. }
  179. }
  180. // if (self.makeupBtn.selected) {
  181. // NSInteger selectedIndex = self.makeupView.selectedIndex ;
  182. // self.makeupView.type = FUFilterSliderType01 ;
  183. // self.beautySlider.hidden = selectedIndex <= 0;
  184. // if (selectedIndex >= 0) {
  185. // PFBeautyParam *modle = self.makeupView.filters[selectedIndex];
  186. // _seletedParam = modle;
  187. // self.beautySlider.value = modle.mValue;
  188. // }
  189. // }
  190. if (self.stickersBtn.selected) {
  191. NSInteger selectedIndex = self.stickersView.selectedIndex;
  192. self.beautySlider.hidden = YES;
  193. if (selectedIndex >= 0) {
  194. PFBeautyParam *modle = self.stickersView.filters[selectedIndex];
  195. _seletedParam = modle;
  196. self.beautySlider.value = modle.mValue;
  197. }
  198. }
  199. [self showTopViewWithAnimation:self.topView.isHidden];
  200. [self setSliderTyep:_seletedParam];
  201. if ([self.mDelegate respondsToSelector:@selector(bottomDidChange:)]) {
  202. [self.mDelegate bottomDidChange:sender.tag - 101];
  203. }
  204. }
  205. -(void)setSliderTyep:(PFBeautyParam *)param{
  206. if (param.iSStyle101) {
  207. self.beautySlider.type = FUFilterSliderType101;
  208. }else{
  209. self.beautySlider.type = FUFilterSliderType01 ;
  210. }
  211. }
  212. // 开启上半部分
  213. - (void)showTopViewWithAnimation:(BOOL)animation {
  214. if (animation) {
  215. self.topView.alpha = 0.0 ;
  216. self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ;
  217. self.topView.hidden = NO ;
  218. [UIView animateWithDuration:0.35 animations:^{
  219. self.topView.transform = CGAffineTransformIdentity ;
  220. self.topView.alpha = 1.0 ;
  221. }];
  222. if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) {
  223. [self.mDelegate showTopView:YES];
  224. }
  225. }else {
  226. self.topView.transform = CGAffineTransformIdentity ;
  227. self.topView.alpha = 1.0 ;
  228. }
  229. }
  230. // 关闭上半部分
  231. -(void)hiddenTopViewWithAnimation:(BOOL)animation {
  232. if (self.topView.hidden) {
  233. return ;
  234. }
  235. if (animation) {
  236. self.topView.alpha = 1.0 ;
  237. self.topView.transform = CGAffineTransformIdentity ;
  238. self.topView.hidden = NO ;
  239. [UIView animateWithDuration:0.35 animations:^{
  240. self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ;
  241. self.topView.alpha = 0.0 ;
  242. }completion:^(BOOL finished) {
  243. self.topView.hidden = YES ;
  244. self.topView.alpha = 1.0 ;
  245. self.topView.transform = CGAffineTransformIdentity ;
  246. self.skinBtn.selected = NO ;
  247. self.shapeBtn.selected = NO ;
  248. self.beautyFilterBtn.selected = NO ;
  249. }];
  250. if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) {
  251. [self.mDelegate showTopView:NO];
  252. }
  253. }else {
  254. self.topView.hidden = YES ;
  255. self.topView.alpha = 1.0 ;
  256. self.topView.transform = CGAffineTransformIdentity ;
  257. }
  258. }
  259. - (UIViewController *)viewControllerFromView:(UIView *)view {
  260. for (UIView *next = [view superview]; next; next = next.superview) {
  261. UIResponder *nextResponder = [next nextResponder];
  262. if ([nextResponder isKindOfClass:[UIViewController class]]) {
  263. return (UIViewController *)nextResponder;
  264. }
  265. }
  266. return nil;
  267. }
  268. #pragma mark - Action
  269. - (void)onBtnCompareTouchDown:(UIButton *)sender{
  270. sender.selected = YES;
  271. if ([self.mDelegate respondsToSelector:@selector(comparisonButtonDidClick:)]) {
  272. [self.mDelegate comparisonButtonDidClick:sender.selected];
  273. }
  274. }
  275. - (void)onBtnCompareTouchUpInside:(UIButton *)sender{
  276. sender.selected = NO;
  277. if ([self.mDelegate respondsToSelector:@selector(comparisonButtonDidClick:)]) {
  278. [self.mDelegate comparisonButtonDidClick:sender.selected];
  279. }
  280. }
  281. #pragma mark ---- PFFilterViewDelegate
  282. // 开启滤镜
  283. -(void)filterViewDidSelectedFilter:(PFBeautyParam *)param{
  284. _seletedParam = param;
  285. self.beautySlider.hidden = YES;
  286. if(param.type == FUDataTypeFilter&& _beautyFilterView.selectedIndex > 0){
  287. self.beautySlider.value = param.mValue;
  288. self.beautySlider.hidden = NO;
  289. }
  290. [self setSliderTyep:_seletedParam];
  291. if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
  292. [_mDelegate filterValueChange:_seletedParam];
  293. }
  294. }
  295. -(void)beautyCollectionView:(PFBeautyView *)beautyView didSelectedParam:(PFBeautyParam *)param{
  296. _seletedParam = param;
  297. self.beautySlider.value = param.mValue;
  298. self.beautySlider.hidden = NO;
  299. [self setSliderTyep:_seletedParam];
  300. }
  301. // 滑条滑动
  302. - (IBAction)filterSliderValueChange:(PFSlider *)sender {
  303. _seletedParam.mValue = sender.value;
  304. if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
  305. [_mDelegate filterValueChange:_seletedParam];
  306. }
  307. // if(fabsf(sender.value) < 0.01){
  308. [_shapeView reloadData];
  309. [_skinView reloadData];
  310. // }
  311. }
  312. - (IBAction)isOpenFURender:(UISwitch *)sender {
  313. if (_mDelegate && [_mDelegate respondsToSelector:@selector(switchRenderState:)]) {
  314. [_mDelegate switchRenderState:sender.on];
  315. }
  316. }
  317. -(void)reloadSkinView:(NSArray<PFBeautyParam *> *)skinParams{
  318. _skinView.dataArray = skinParams;
  319. _skinView.selectedIndex = 0;
  320. PFBeautyParam *modle = skinParams[0];
  321. if (modle) {
  322. _beautySlider.hidden = NO;
  323. _beautySlider.value = modle.mValue;
  324. }
  325. [_skinView reloadData];
  326. }
  327. -(void)reloadShapView:(NSArray<PFBeautyParam *> *)shapParams{
  328. _shapeView.dataArray = shapParams;
  329. _shapeView.selectedIndex = 1;
  330. [_shapeView reloadData];
  331. }
  332. -(void)reloadFilterView:(NSArray<PFBeautyParam *> *)filterParams{
  333. _beautyFilterView.filters = filterParams;
  334. [_beautyFilterView reloadData];
  335. }
  336. -(void)setDefaultFilter:(PFBeautyParam *)filter{
  337. [self.beautyFilterView setDefaultFilter:filter];
  338. }
  339. -(BOOL)isTopViewShow {
  340. return !self.topView.hidden ;
  341. }
  342. -(void)setFaceType:(PFBeautyParam *)paramm {
  343. int indexValue = (int)[_faceTypeParams indexOfObject:paramm];
  344. NSDictionary *dic = [PFDateHandle setFaceType:indexValue];
  345. for (PFBeautyParam *param in _shapeParams) {
  346. if([dic.allKeys containsObject:param.mParam]) {
  347. param.mValue = [dic[param.mParam] floatValue];
  348. }else {
  349. param.mValue = 0.0f;
  350. }
  351. if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
  352. [_mDelegate filterValueChange:param];
  353. }
  354. }
  355. for (PFBeautyParam *param in _skinParams) {
  356. if([dic.allKeys containsObject:param.mParam]) {
  357. param.mValue = [dic[param.mParam] floatValue];
  358. } else {
  359. param.mValue = 0.0f;
  360. }
  361. if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
  362. [_mDelegate filterValueChange:param];
  363. }
  364. }
  365. [_skinView reloadData];
  366. [_shapeView reloadData];
  367. }
  368. -(void)setOneKeyType:(int)oneKeyType {
  369. _faceTypeView.selectedIndex = oneKeyType;
  370. }
  371. - (int)oneKeyType{
  372. return _faceTypeView.selectedIndex;
  373. }
  374. -(void)setFilterIndex:(int)filterIndex{
  375. _beautyFilterView.selectedIndex = filterIndex;
  376. }
  377. - (int)filterIndex{
  378. return _beautyFilterView.selectedIndex;
  379. }
  380. @end