123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- //
- // PFDemoBar.m
- //
- // Created by mumu on 2021/9/6.
- //
- #import "PFAPIDemoBar.h"
- #import "PFFilterView.h"
- #import "PFSlider.h"
- #import "PFBeautyView.h"
- #import "PFBeautyParam.h"
- #import "PFDateHandle.h"
- @interface PFAPIDemoBar ()<PFFilterViewDelegate, PFBeautyViewDelegate>
- @property (weak, nonatomic) IBOutlet UIButton *skinBtn;
- @property (weak, nonatomic) IBOutlet UIButton *shapeBtn;
- @property (weak, nonatomic) IBOutlet UIButton *beautyFilterBtn;
- @property (weak, nonatomic) IBOutlet UIButton *faceTypeBtn;
- @property (weak, nonatomic) IBOutlet UIButton *comparisonButton;
- @property (weak, nonatomic) IBOutlet UIButton *stickersBtn;
- // 上半部分
- @property (weak, nonatomic) IBOutlet UIView *topView;
- // 滤镜页
- @property (weak, nonatomic) IBOutlet PFFilterView *faceTypeView;
- // 美颜滤镜页
- @property (weak, nonatomic) IBOutlet PFFilterView *beautyFilterView;
- @property (weak, nonatomic) IBOutlet PFFilterView *makeupView;
- @property (weak, nonatomic) IBOutlet PFSlider *beautySlider;
- @property (weak, nonatomic) IBOutlet PFFilterView *stickersView;
- // 美型页
- @property (weak, nonatomic) IBOutlet PFBeautyView *shapeView;
- // 美肤页
- @property (weak, nonatomic) IBOutlet PFBeautyView *skinView;
- /* 当前选中参数 */
- @property (strong, nonatomic) PFBeautyParam *seletedParam;
- @end
- @implementation PFAPIDemoBar
- -(instancetype)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {self.backgroundColor = [UIColor clearColor];
-
- self.backgroundColor = [UIColor clearColor];
- NSBundle *bundle = [NSBundle bundleForClass:[PFAPIDemoBar class]];
- self = (PFAPIDemoBar *)[bundle loadNibNamed:@"PFAPIDemoBar" owner:self options:nil].firstObject;
- self.frame = frame;
- }
- return self ;
- }
- -(void)awakeFromNib {
- [super awakeFromNib];
- [self setupDate];
-
- [self reloadShapView:_shapeParams];
- [self reloadSkinView:_skinParams];
- [self reloadFilterView:_filtersParams];
-
- _makeupView.filters = _makeupParams;
- [_makeupView setDefaultFilter:_makeupParams[0]];
- [_makeupView reloadData];
-
- _faceTypeView.filters = _faceTypeParams;
- [_faceTypeView setDefaultFilter:_faceTypeParams[0]];
- [_faceTypeView reloadData];
-
- _stickersView.filters = _stickersParams;
- [_stickersView setDefaultFilter:_stickersParams[0]];
- [_stickersView reloadData];
-
- self.faceTypeView.mDelegate = self ;
- self.makeupView.mDelegate = self;
- self.beautyFilterView.mDelegate = self ;
-
- self.stickersView.mDelegate = self;
- self.shapeView.mDelegate = self ;
- self.skinView.mDelegate = self;
-
- [self.skinBtn setTitle:NSLocalizedString(@"美肤", nil) forState:UIControlStateNormal];
- [self.shapeBtn setTitle:NSLocalizedString(@"美型", nil) forState:UIControlStateNormal];
- [self.beautyFilterBtn setTitle:NSLocalizedString(@"滤镜", nil) forState:UIControlStateNormal];
-
- self.faceTypeBtn.tag = 101;
- self.skinBtn.tag = 102;
- self.shapeBtn.tag = 103;
- self.beautyFilterBtn.tag = 104 ;
- self.stickersBtn.tag = 106;
-
- self.comparisonButton.tag = 101;
- [self.comparisonButton setImage:[UIImage imageNamed:@"comparison_icon"] forState:UIControlStateNormal];
- [self.comparisonButton setImage:[UIImage imageNamed:@"comparison_icon"] forState:UIControlStateSelected];
- [self.comparisonButton addTarget:self action:@selector(onBtnCompareTouchDown:) forControlEvents:UIControlEventTouchDown];
- [self.comparisonButton addTarget:self action:@selector(onBtnCompareTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
- self.comparisonButton.hidden = YES;
- }
- -(void)setupDate{
- _filtersParams = [PFDateHandle setupFilterData];
- _shapeParams = [PFDateHandle setupShapData];
- _skinParams = [PFDateHandle setupSkinData];
- _faceTypeParams = [PFDateHandle setupFaceType];
- // _makeupParams = [PFDateHandle setupMakeupData];
- _stickersParams = [PFDateHandle setupStickers];
- }
- -(void)updateDemoBar{
- _faceTypeView.filters = _faceTypeParams;
- [_faceTypeView reloadData];
- _beautyFilterView.filters = _filtersParams;
- [_beautyFilterView reloadData];
- _stickersView.filters = _stickersParams;
- [_stickersView reloadData];
- _shapeView.dataArray = _shapeParams;
- [_shapeView reloadData];
- // 美肤页
- _skinView.dataArray = _skinParams;
- [_skinView reloadData];
- }
- -(void)layoutSubviews{
- [super layoutSubviews];
- }
- -(void)updateUI:(UIButton *)sender{
- self.skinBtn.selected = NO;
- self.shapeBtn.selected = NO;
- self.beautyFilterBtn.selected = NO;
-
- self.faceTypeBtn.selected = NO;
- self.stickersBtn.selected = NO;
-
-
- self.skinView.hidden = YES;
- self.shapeView.hidden = YES ;
- self.beautyFilterView.hidden = YES;
-
- self.makeupView.hidden = YES;
- self.faceTypeView.hidden = YES;
- self.stickersView.hidden = YES;
-
- sender.selected = YES;
-
- if (sender == self.skinBtn) {
- self.skinView.hidden = NO;
- }
- if (sender == self.faceTypeBtn) {
- self.faceTypeView.hidden = NO;
- }
- if (sender == self.beautyFilterBtn) {
- self.beautyFilterView.hidden = NO;
- }
- if (sender == self.shapeBtn) {
- self.shapeView.hidden = NO;
- }
- if (sender == self.stickersBtn) {
- self.stickersView.hidden = NO;
- }
- }
- - (IBAction)bottomBtnsSelected:(UIButton *)sender {
- if (sender.selected) {
- sender.selected = NO ;
- [self hiddenTopViewWithAnimation:YES];
- return ;
- }
- [self updateUI:sender];
-
- if (self.shapeBtn.selected) {
- /* 修改当前UI */
- NSInteger selectedIndex = self.shapeView.selectedIndex;
- self.beautySlider.hidden = selectedIndex < 0 ;
-
- if (selectedIndex >= 0) {
- PFBeautyParam *modle = self.shapeView.dataArray[selectedIndex];
- _seletedParam = modle;
- self.beautySlider.value = modle.mValue;
- }
- }
-
- if (self.skinBtn.selected) {
- NSInteger selectedIndex = self.skinView.selectedIndex;
- self.beautySlider.hidden = selectedIndex < 0 ;
-
- if (selectedIndex >= 0) {
- PFBeautyParam *modle = self.skinView.dataArray[selectedIndex];
- _seletedParam = modle;
- self.beautySlider.value = modle.mValue;
- }
- }
-
- // slider 是否显示
- if (self.beautyFilterBtn.selected) {
- NSInteger selectedIndex = self.beautyFilterView.selectedIndex ;
- self.beautySlider.type = FUFilterSliderType01 ;
- self.beautySlider.hidden = selectedIndex <= 0;
- if (selectedIndex >= 0) {
- PFBeautyParam *modle = self.beautyFilterView.filters[selectedIndex];
- _seletedParam = modle;
- self.beautySlider.value = modle.mValue;
- }
- }
-
- if (self.faceTypeBtn.selected) {
- NSInteger selectedIndex = self.faceTypeView.selectedIndex ;
- self.beautySlider.hidden = YES;
- if (selectedIndex >= 0) {
- PFBeautyParam *modle = self.beautyFilterView.filters[selectedIndex];
- _seletedParam = modle;
- }
- }
-
-
- // if (self.makeupBtn.selected) {
- // NSInteger selectedIndex = self.makeupView.selectedIndex ;
- // self.makeupView.type = FUFilterSliderType01 ;
- // self.beautySlider.hidden = selectedIndex <= 0;
- // if (selectedIndex >= 0) {
- // PFBeautyParam *modle = self.makeupView.filters[selectedIndex];
- // _seletedParam = modle;
- // self.beautySlider.value = modle.mValue;
- // }
- // }
- if (self.stickersBtn.selected) {
- NSInteger selectedIndex = self.stickersView.selectedIndex;
- self.beautySlider.hidden = YES;
-
- if (selectedIndex >= 0) {
- PFBeautyParam *modle = self.stickersView.filters[selectedIndex];
- _seletedParam = modle;
- self.beautySlider.value = modle.mValue;
- }
- }
-
-
- [self showTopViewWithAnimation:self.topView.isHidden];
- [self setSliderTyep:_seletedParam];
-
- if ([self.mDelegate respondsToSelector:@selector(bottomDidChange:)]) {
- [self.mDelegate bottomDidChange:sender.tag - 101];
- }
- }
- -(void)setSliderTyep:(PFBeautyParam *)param{
- if (param.iSStyle101) {
- self.beautySlider.type = FUFilterSliderType101;
- }else{
- self.beautySlider.type = FUFilterSliderType01 ;
- }
- }
- // 开启上半部分
- - (void)showTopViewWithAnimation:(BOOL)animation {
-
- if (animation) {
- self.topView.alpha = 0.0 ;
- self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ;
- self.topView.hidden = NO ;
- [UIView animateWithDuration:0.35 animations:^{
- self.topView.transform = CGAffineTransformIdentity ;
- self.topView.alpha = 1.0 ;
- }];
-
- if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) {
- [self.mDelegate showTopView:YES];
- }
- }else {
- self.topView.transform = CGAffineTransformIdentity ;
- self.topView.alpha = 1.0 ;
- }
- }
- // 关闭上半部分
- -(void)hiddenTopViewWithAnimation:(BOOL)animation {
-
- if (self.topView.hidden) {
- return ;
- }
- if (animation) {
- self.topView.alpha = 1.0 ;
- self.topView.transform = CGAffineTransformIdentity ;
- self.topView.hidden = NO ;
- [UIView animateWithDuration:0.35 animations:^{
- self.topView.transform = CGAffineTransformMakeTranslation(0, self.topView.frame.size.height / 2.0) ;
- self.topView.alpha = 0.0 ;
- }completion:^(BOOL finished) {
- self.topView.hidden = YES ;
- self.topView.alpha = 1.0 ;
- self.topView.transform = CGAffineTransformIdentity ;
-
- self.skinBtn.selected = NO ;
- self.shapeBtn.selected = NO ;
- self.beautyFilterBtn.selected = NO ;
- }];
-
- if (self.mDelegate && [self.mDelegate respondsToSelector:@selector(showTopView:)]) {
- [self.mDelegate showTopView:NO];
- }
- }else {
-
- self.topView.hidden = YES ;
- self.topView.alpha = 1.0 ;
- self.topView.transform = CGAffineTransformIdentity ;
- }
- }
- - (UIViewController *)viewControllerFromView:(UIView *)view {
- for (UIView *next = [view superview]; next; next = next.superview) {
- UIResponder *nextResponder = [next nextResponder];
- if ([nextResponder isKindOfClass:[UIViewController class]]) {
- return (UIViewController *)nextResponder;
- }
- }
- return nil;
- }
- #pragma mark - Action
- - (void)onBtnCompareTouchDown:(UIButton *)sender{
- sender.selected = YES;
- if ([self.mDelegate respondsToSelector:@selector(comparisonButtonDidClick:)]) {
- [self.mDelegate comparisonButtonDidClick:sender.selected];
- }
- }
- - (void)onBtnCompareTouchUpInside:(UIButton *)sender{
- sender.selected = NO;
- if ([self.mDelegate respondsToSelector:@selector(comparisonButtonDidClick:)]) {
- [self.mDelegate comparisonButtonDidClick:sender.selected];
- }
- }
- #pragma mark ---- PFFilterViewDelegate
- // 开启滤镜
- -(void)filterViewDidSelectedFilter:(PFBeautyParam *)param{
- _seletedParam = param;
- self.beautySlider.hidden = YES;
- if(param.type == FUDataTypeFilter&& _beautyFilterView.selectedIndex > 0){
- self.beautySlider.value = param.mValue;
- self.beautySlider.hidden = NO;
- }
- [self setSliderTyep:_seletedParam];
-
- if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
- [_mDelegate filterValueChange:_seletedParam];
- }
- }
- -(void)beautyCollectionView:(PFBeautyView *)beautyView didSelectedParam:(PFBeautyParam *)param{
- _seletedParam = param;
- self.beautySlider.value = param.mValue;
- self.beautySlider.hidden = NO;
-
- [self setSliderTyep:_seletedParam];
- }
- // 滑条滑动
- - (IBAction)filterSliderValueChange:(PFSlider *)sender {
- _seletedParam.mValue = sender.value;
- if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
- [_mDelegate filterValueChange:_seletedParam];
- }
- // if(fabsf(sender.value) < 0.01){
- [_shapeView reloadData];
- [_skinView reloadData];
- // }
- }
- - (IBAction)isOpenFURender:(UISwitch *)sender {
-
- if (_mDelegate && [_mDelegate respondsToSelector:@selector(switchRenderState:)]) {
- [_mDelegate switchRenderState:sender.on];
- }
- }
- -(void)reloadSkinView:(NSArray<PFBeautyParam *> *)skinParams{
- _skinView.dataArray = skinParams;
- _skinView.selectedIndex = 0;
- PFBeautyParam *modle = skinParams[0];
- if (modle) {
- _beautySlider.hidden = NO;
- _beautySlider.value = modle.mValue;
- }
- [_skinView reloadData];
- }
- -(void)reloadShapView:(NSArray<PFBeautyParam *> *)shapParams{
- _shapeView.dataArray = shapParams;
- _shapeView.selectedIndex = 1;
- [_shapeView reloadData];
- }
- -(void)reloadFilterView:(NSArray<PFBeautyParam *> *)filterParams{
- _beautyFilterView.filters = filterParams;
- [_beautyFilterView reloadData];
- }
- -(void)setDefaultFilter:(PFBeautyParam *)filter{
- [self.beautyFilterView setDefaultFilter:filter];
- }
- -(BOOL)isTopViewShow {
- return !self.topView.hidden ;
- }
- -(void)setFaceType:(PFBeautyParam *)paramm {
- int indexValue = (int)[_faceTypeParams indexOfObject:paramm];
- NSDictionary *dic = [PFDateHandle setFaceType:indexValue];
-
- for (PFBeautyParam *param in _shapeParams) {
- if([dic.allKeys containsObject:param.mParam]) {
- param.mValue = [dic[param.mParam] floatValue];
- }else {
- param.mValue = 0.0f;
- }
-
- if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
- [_mDelegate filterValueChange:param];
- }
-
- }
-
- for (PFBeautyParam *param in _skinParams) {
- if([dic.allKeys containsObject:param.mParam]) {
- param.mValue = [dic[param.mParam] floatValue];
- } else {
- param.mValue = 0.0f;
- }
- if (_mDelegate && [_mDelegate respondsToSelector:@selector(filterValueChange:)]) {
- [_mDelegate filterValueChange:param];
- }
- }
-
- [_skinView reloadData];
- [_shapeView reloadData];
- }
- -(void)setOneKeyType:(int)oneKeyType {
- _faceTypeView.selectedIndex = oneKeyType;
- }
- - (int)oneKeyType{
- return _faceTypeView.selectedIndex;
- }
- -(void)setFilterIndex:(int)filterIndex{
- _beautyFilterView.selectedIndex = filterIndex;
- }
- - (int)filterIndex{
- return _beautyFilterView.selectedIndex;
- }
- @end
|