美文网首页
2018-06-01坑爹的ManageCollection

2018-06-01坑爹的ManageCollection

作者: 香蕉你个菠萝 | 来源:发表于2018-06-01 17:48 被阅读16次

    ManageCollectViewController.h

    #import "ViewBaseController.h"
    
    @interface ManageCollectViewController : ViewBaseController
    @property (nonatomic,strong) NSMutableArray *preDataArray;//前一页
    @end
    

    ManageCollectViewController.m

    //
    //  ManageCollectViewController.m
    //  DXYiGe
    //
    //  Created by JHT on 2018/5/31.
    //  Copyright © 2018年 QC. All rights reserved.
    //
    
    #import "ManageCollectViewController.h"
    #import "ManageCollectMainView.h"
    #import "ManageCollectViewModel.h"
    
    @interface ManageCollectViewController ()
    @property (nonatomic,strong) ManageCollectMainView *mainView;
    @property (nonatomic,strong) ManageCollectViewModel *viewModel;
    @end
    
    @implementation ManageCollectViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
    }
    -(void)bindViewModel {
        
    }
    -(void)setPreDataArray:(NSMutableArray *)preDataArray {
        
        self.mainView.preDataArray = preDataArray;
        
    }
    -(void)editBtnClick:(UIButton *)sender {
        sender.selected = !sender.selected;
        NSString * isHidden = [NSString stringWithFormat:@"%@",sender.selected ? @"1":@"0"];
        [self.viewModel.editSubject sendNext:isHidden];
        [self.mainView setIsHiddenBtn:sender.selected];
    }
    -(UIBarButtonItem *)rightButton {
        UIButton* btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 43, 23)];
        [btn setTitle:@"编辑" forState:UIControlStateNormal];
        [btn setTitle:@"完成" forState:UIControlStateSelected];
        btn.titleLabel.textAlignment = NSTextAlignmentRight;
        [btn setTitleColor:DEFAULT_YELLOW_COLOR forState:UIControlStateNormal];
        btn.titleLabel.font = [UIFont systemFontOfSize:16.0f];
        [btn setBackgroundColor:[UIColor clearColor]];
        [btn addTarget:self action:@selector(editBtnClick:) forControlEvents:UIControlEventTouchUpInside];//设置按钮的点击事件
        return [[UIBarButtonItem alloc] initWithCustomView:btn];
    }
    
    -(void)addChildView {
        [self.view addSubview:self.mainView];
    }
    -(void)updateViewConstraints {
        [self.mainView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(self.view);
        }];
        [super updateViewConstraints];
    }
    -(ManageCollectMainView *)mainView {
        if (!_mainView) {
            _mainView = [[ManageCollectMainView alloc] init];
        }
        return _mainView;
    }
    -(ManageCollectViewModel *)viewModel {
        if (!_viewModel) {
            _viewModel = [[ManageCollectViewModel alloc] init];
        }
        return _viewModel;
    }
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    /*
    #pragma mark - Navigation
    
    // In a storyboard-based application, you will often want to do a little preparation before navigation
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
    }
    */
    
    @end
    
    

    ManageCollectMainView.h

    #import "BaseView.h"
    
    @interface ManageCollectMainView : BaseView
    @property (nonatomic,strong) NSMutableArray *topDataArray;
    @property (nonatomic,strong) NSMutableArray *bottomDataArray;
    
    @property (nonatomic,strong) NSMutableArray *preDataArray;//传入
    
    @property (nonatomic,assign) BOOL isHiddenBtn;
    @end
    

    ManageCollectMainView.m

    //
    //  ManageCollectMainView.m
    //  DXYiGe
    //
    //  Created by JHT on 2018/5/31.
    //  Copyright © 2018年 QC. All rights reserved.
    //
    
    #import "ManageCollectMainView.h"
    #import "ManageCollectViewModel.h"
    #import "ManageCollectionCell.h"
    #import "ManageCollectItemModel.h"
    
    @interface ManageCollectMainView ()<UICollectionViewDelegate,UICollectionViewDataSource>
    @property (nonatomic,strong) ManageCollectViewModel *viewModel;
    @property (nonatomic,strong) UICollectionView *topCollectionView;
    @property (nonatomic,strong) UICollectionView *bottomCollectionView;
    @property (nonatomic,strong) NSMutableArray *allDataArray;
    
    @end
    
    @implementation ManageCollectMainView
    
    -(instancetype)initWithViewModel:(id<BaseViewModelProtocol>)viewModel {
        self.viewModel = (ManageCollectViewModel *)viewModel;
        return [super initWithViewModel:self.viewModel];
    }
    -(void)setIsHiddenBtn:(BOOL)isHiddenBtn {
        _isHiddenBtn = isHiddenBtn;
        NSLog(@"main-ishidden->%@",isHiddenBtn ? @"1":@"0");//edit 完成
        [self.topCollectionView reloadData];
        [self.bottomCollectionView reloadData];
        
        
    
    }
    
    -(void)bindViewModel {
        
    
    
        [self.viewModel.editSubject subscribeNext:^(id  _Nullable x) {
            
            NSLog(@"main-ishidden->%@",x);
        }];
        
    }
    
    -(void)setPreDataArray:(NSMutableArray *)preDataArray {//5
        
        NSMutableArray * top = [NSMutableArray array];
        NSMutableArray * bottom = [NSMutableArray array];
        
        NSMutableArray *selectItemArray = [NSMutableArray array];//未中
        
        [preDataArray enumerateObjectsUsingBlock:^(ManageCollectItemModel *  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
            if (obj.selected) {
                [top addObject:obj];
                [selectItemArray addObject:[NSString stringWithFormat:@"%@",obj.id]];
            }
            
        }];
        
        NSLog(@"all---->%@\n 1-5->%@",self.allDataArray,selectItemArray);
        
        //去重
        for (int i = 0; i < self.allDataArray.count; i++) {
            BOOL isrepeat = NO;
            ManageCollectItemModel * model = self.allDataArray[i];
            
            for (int j = 0; j<selectItemArray.count; j++) {
                NSString * idStr = selectItemArray[j];
                if ([idStr isEqualToString:model.id]) {
                    isrepeat = YES;
                    break;
                }
            }
            if (!isrepeat) {
                [bottom addObject:model];
            }
        }
        
    
        
       
        
        NSLog(@" top->%@\n  bottom->%@",top,bottom);
        self.topDataArray = top;
        self.bottomDataArray = bottom;
        [self.topCollectionView reloadData];
        [self.bottomCollectionView reloadData];
        
    }
    
    -(NSMutableArray *)allDataArray {
        if (!_allDataArray) {
            _allDataArray = [NSMutableArray array];
            //设置数据源 all
            for (int i = 0; i<7; i++) {
                ManageCollectItemModel * itemModel = [[ManageCollectItemModel alloc] init];
                itemModel.id = [NSString stringWithFormat:@"%d",i];
                itemModel.selected = NO;
                itemModel.content = [NSString stringWithFormat:@"i am %d",i];
                [_allDataArray addObject:itemModel];
            }
            
        }
        return _allDataArray;
    }
    -(NSMutableArray *)bottomDataArray {
        if (!_bottomDataArray) {
            _bottomDataArray = [NSMutableArray array];
        }
        return _bottomDataArray;
    }
    -(NSMutableArray *)topDataArray {
        if (!_topDataArray) {
            _topDataArray = [NSMutableArray array];
        }
        return _topDataArray;
    }
    # pragma mark collectionView代理事件
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
        if ([collectionView isEqual:self.topCollectionView]) {
            return self.topDataArray.count;
        }else {
            return self.bottomDataArray.count;
        }
    }
    
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
        ManageCollectionCell  *cell =[collectionView dequeueReusableCellWithReuseIdentifier:[NSString stringWithUTF8String:object_getClassName([ManageCollectionCell class])] forIndexPath:indexPath];
        if ([collectionView isEqual:self.topCollectionView]) {
            
            ManageCollectItemModel * model = [ManageCollectItemModel mj_objectWithKeyValues:self.topDataArray[indexPath.row]];
            cell.itemModel = model;
            if (!self.isHiddenBtn) {
                cell.editBtn.hidden = YES;
            }else cell.editBtn.hidden = NO;
            
            [cell.editBtn setBackgroundImage:[UIImage imageNamed:@"del"] forState:UIControlStateNormal];
            
            WS(weakSelf)
            cell.editBlock = ^(ManageCollectItemModel *model) {
                
                NSLog(@"上面dele下面add--%@",model);
                
                model.selected = NO;
                [self.bottomDataArray addObject:model];
                [weakSelf.bottomCollectionView reloadData];
                
                for (int i = 0; i< self.topDataArray.count; i++) {
                    ManageCollectItemModel * tempModel = self.topDataArray[i];
                    if ([model.id isEqualToString:tempModel.id]) {
                        [self.topDataArray removeObjectAtIndex:i];
                    }
                }
                
                [weakSelf.topCollectionView reloadData];
            };
            
            return cell;
            
        }else {
            
            ManageCollectItemModel * model = [ManageCollectItemModel mj_objectWithKeyValues:self.bottomDataArray[indexPath.row]];
            cell.itemModel = model;
            if (!self.isHiddenBtn) {
                cell.editBtn.hidden = YES;
            }else cell.editBtn.hidden = NO;
            
            [cell.editBtn setBackgroundImage:[UIImage imageNamed:@"pay_xuanzhogn"] forState:UIControlStateNormal];
            
            WS(weakSelf)
            
            cell.editBlock = ^(ManageCollectItemModel *model) {
                
                NSLog(@"点击的itemBtn--%@",model);
                
                model.selected = YES;
                [self.topDataArray addObject:model];
                [weakSelf.topCollectionView reloadData];
                
                for (int i = 0; i< self.bottomDataArray.count; i++) {
                    ManageCollectItemModel * tempModel = self.bottomDataArray[i];
                    if ([model.id isEqualToString:tempModel.id]) {
                        [self.bottomDataArray removeObjectAtIndex:i];
                    }
                }
                
                [weakSelf.bottomCollectionView reloadData];
            };
            
            return cell;
        }
        
    }
    #pragma mark 图片点击
    - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
        
    }
    
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
        return CGSizeMake(150, 50);
    }
    - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
        return UIEdgeInsetsMake(15, 15, 15, 15);
    }
    //layout协议
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    
        return 7.f;
    }
    
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    
        return 7.f;
    }
    
    //允许移动
    -(BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath {
        if (self.isHiddenBtn) {
            return YES;
        }else return NO;
    }
    
    -(void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
        
        if ([collectionView isEqual:self.topCollectionView]) {
            //获取
            id object = [self.topDataArray objectAtIndex:sourceIndexPath.item];
            //移除
            [self.topDataArray removeObject:object];
            //插入
            [self.topDataArray insertObject:object atIndex:destinationIndexPath.item];
    
        }
    }
    -(void)handleLongGesture:(UILongPressGestureRecognizer *)longGesture {
        
        switch (longGesture.state) {
            case UIGestureRecognizerStateBegan:
            {
                //判断手势点是否在路径上
                NSIndexPath * indexPath = [self.topCollectionView indexPathForItemAtPoint:[longGesture locationInView:self.topCollectionView]];
                if (indexPath == nil) {
                    break;
                }
                [self.topCollectionView beginInteractiveMovementForItemAtIndexPath:indexPath];
                
                for (ManageCollectionCell *cell in [self.topCollectionView visibleCells]) {
                    [self startShake:cell];
                }
            }
                break;
            case UIGestureRecognizerStateChanged:
            {
                [self.topCollectionView updateInteractiveMovementTargetPosition:[longGesture locationInView:self.topCollectionView]];
            
                
            }
                break;
            case UIGestureRecognizerStateEnded:
            {
                [self.topCollectionView endInteractiveMovement];
                
                for (ManageCollectionCell *cell in [self.topCollectionView visibleCells]) {
                    [self stopShake:cell];
                }
            }
                break;
                
            default:
                [self.topCollectionView cancelInteractiveMovement];
                break;
        }
    }
    
    -(void)startShake:(ManageCollectionCell *)cell {
        
        CAKeyframeAnimation * keyAnimation = [CAKeyframeAnimation animation];
        keyAnimation.keyPath = @"transform.rotation";
        keyAnimation.values = @[@(-2 / 180.0 * M_PI),@(2 /180.0 * M_PI),@(-2/ 180.0 * M_PI)];//度数转弧度
        keyAnimation.removedOnCompletion = NO;
        keyAnimation.fillMode = kCAFillModeForwards;
        keyAnimation.duration = 0.3;
        keyAnimation.repeatCount = MAXFLOAT;
        [cell.layer addAnimation:keyAnimation forKey:@"cellShake"];
        
        
    }
    
    -(void)stopShake:(ManageCollectionCell *)cell {
        [cell.layer removeAnimationForKey:@"cellShake"];
    }
    
    -(UICollectionView *)topCollectionView {
        if (!_topCollectionView) {
            UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
            //设置滚动方向
            layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
            _topCollectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:layout];
            [layout setItemSize:CGSizeMake(150, 50)];//100
            
            _topCollectionView.delegate = self;
            _topCollectionView.dataSource = self;
            _topCollectionView.pagingEnabled = NO;
            _topCollectionView.showsHorizontalScrollIndicator = NO;
            _topCollectionView.backgroundColor = RGB(240, 240, 240);
            [_topCollectionView registerClass:[ManageCollectionCell class] forCellWithReuseIdentifier:[NSString stringWithUTF8String:object_getClassName([ManageCollectionCell class])]];
            
            UILongPressGestureRecognizer * longGest = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongGesture:)];
            [_topCollectionView addGestureRecognizer:longGest];
        }
        return _topCollectionView;
    }
    -(UICollectionView *)bottomCollectionView {
        if (!_bottomCollectionView) {
            UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
            //设置滚动方向
            layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
            _bottomCollectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:layout];
            [layout setItemSize:CGSizeMake(150, 50)];//100
            
            _bottomCollectionView.delegate = self;
            _bottomCollectionView.dataSource = self;
            _bottomCollectionView.pagingEnabled = NO;
            _bottomCollectionView.showsHorizontalScrollIndicator = NO;
            _bottomCollectionView.backgroundColor = RGB(240, 240, 240);
            [_bottomCollectionView registerClass:[ManageCollectionCell class] forCellWithReuseIdentifier:[NSString stringWithUTF8String:object_getClassName([ManageCollectionCell class])]];
        }
        return _bottomCollectionView;
    }
    
    -(void)setupViews {
        self.isHiddenBtn = NO;
        self.backgroundColor = [UIColor whiteColor];
        [self addSubview:self.topCollectionView];
        [self addSubview:self.bottomCollectionView];
        [self setNeedsUpdateConstraints];
        [self updateConstraintsIfNeeded];
    }
    -(void)updateConstraints {
        [self.topCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.left.equalTo(self).offset(20);
            make.size.mas_offset(CGSizeMake(SCREEN_WIDTH-40, 200));
        }];
        
        [self.bottomCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.topCollectionView.mas_bottom).offset(20);
            make.left.equalTo(self).offset(20);
            make.size.mas_offset(CGSizeMake(SCREEN_WIDTH-40, 200));
        }];
        [super updateConstraints];
    }
    - (ManageCollectViewModel *)viewModel {
        if (!_viewModel) {
            _viewModel = [[ManageCollectViewModel alloc] init];
        }
        return _viewModel;
    }
    
    @end
    
    

    ManageCollectionCell.h

    
    #import <UIKit/UIKit.h>
    #import "ManageCollectItemModel.h"
    @interface ManageCollectionCell : UICollectionViewCell
    @property (nonatomic,strong) ManageCollectItemModel *itemModel;
    @property (nonatomic,strong) UILabel *contentLabel;
    @property (nonatomic,strong) UIButton *editBtn;
    @property (nonatomic,copy) void (^editBlock) (ManageCollectItemModel * model);
    
    @end
    
    

    ManageCollectionCell.m

    //
    //  ManageCollectionCell.m
    //  DXYiGe
    //
    //  Created by JHT on 2018/5/31.
    //  Copyright © 2018年 QC. All rights reserved.
    //
    
    #import "ManageCollectionCell.h"
    
    @interface ManageCollectionCell ()
    @end
    
    @implementation ManageCollectionCell
    
    -(instancetype)initWithFrame:(CGRect)frame {
        if (self = [super initWithFrame:frame]) {
            [self addSubview:self.contentLabel];
            [self addSubview:self.editBtn];
            [self setNeedsUpdateConstraints];
            [self updateConstraintsIfNeeded];
        }
        return self;
    }
    -(void)setItemModel:(ManageCollectItemModel *)itemModel {
        if (itemModel) {
            _itemModel = itemModel;
            _contentLabel.text = itemModel.content;
            self.backgroundColor = RGB(0, 100, 10);
        }
    }
    -(void)editBtnClick {
        if (self.editBlock) {
            self.editBlock(self.itemModel);
        }
        
    }
    -(void)updateConstraints {
        [self.contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.center.equalTo(self.contentView);
        }];
        [self.editBtn mas_makeConstraints:^(MASConstraintMaker *make) {
            make.right.equalTo(self.contentView).offset(-10);
            make.top.equalTo(self.contentView).offset(-15);
            make.size.mas_offset(CGSizeMake(30, 30));
        }];
        [super updateConstraints];
    }
    -(UIButton *)editBtn {
        if (!_editBtn) {
            _editBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            [_editBtn setBackgroundImage:[UIImage imageNamed:@"del"] forState:UIControlStateNormal];
            [_editBtn addTarget:self action:@selector(editBtnClick) forControlEvents:UIControlEventTouchUpInside];
        }
        return _editBtn;
    }
    -(UILabel *)contentLabel {
        if (!_contentLabel) {
            _contentLabel = [[UILabel alloc] init];
            _contentLabel.textColor = DEFAULT_RED_COLOR;
            _contentLabel.font = [UIFont systemFontOfSize:30];
            _contentLabel.textAlignment = NSTextAlignmentCenter;
        }
        return _contentLabel;
    }
    
    
    @end
    
    

    ManageCollectItemModel.h

    #import <Foundation/Foundation.h>
    
    @interface ManageCollectItemModel : NSObject
    @property (nonatomic,assign) BOOL selected;
    @property (nonatomic,strong) NSString *id;
    @property (nonatomic,strong) NSString *content;
    @end
    

    相关文章

      网友评论

          本文标题:2018-06-01坑爹的ManageCollection

          本文链接:https://www.haomeiwen.com/subject/hxmksftx.html