IOS应用开发:iOS-collectionView实现照片删除
安安 2018-03-22 来源 :网络 阅读 1465 评论 0

摘要:本篇IOS应用开发教程将为大家讲解iOS-collectionView实现照片删除,看完这篇文章会让你对IOS编程的知识点有更加清晰的理解和运用。

本篇IOS应用开发教程将为大家讲解iOS-collectionView实现照片删除,看完这篇文章会让你对IOS编程的知识点有更加清晰的理解和运用。

 

一,效果图。

IOS应用开发:iOS-collectionView实现照片删除 

二,工程图。

 IOS应用开发:iOS-collectionView实现照片删除

三,代码。

ViewController.h


#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout,UIAlertViewDelegate,UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>

{

    UICollectionView *_collectionView;

    UIImagePickerController *_imagePicker;

    NSMutableArray *photos;

    NSMutableArray *dataArray;

    NSInteger deleteIndex;

    BOOL wobble;

}@end

 

 

 

ViewController.m

 

 

//点击添加按钮的时候,停止删除。#import "ViewController.h"#import "photoCollectionViewCell.h"

 

NSInteger const Photo = 8;

@interface ViewController ()

@end

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

 

    //其布局很有意思,当你的cell设置大小后,一行多少个cell,由cell的宽度决定

    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];

    //设置cell的尺寸

    [flowLayout setItemSize:CGSizeMake(70, 70)];

    //设置其布局方向    [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];

    //设置其边界(上,左,下,右)

    flowLayout.sectionInset = UIEdgeInsetsMake(5,5,5,5);

 

    

    _collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(10, 50, 320,85*2) collectionViewLayout:flowLayout];

    _collectionView.dataSource = self;

    _collectionView.delegate = self;

    _collectionView.backgroundColor = [UIColor redColor];

   [_collectionView registerClass:[photoCollectionViewCell class] forCellWithReuseIdentifier:@"photo"];

   [self.view addSubview:_collectionView];

      

    

    photos = [[NSMutableArray alloc ] init];

    

    dataArray = [[NSMutableArray alloc ] init];

    [dataArray addObject:[UIImage imageNamed:@"contract_addpic1"]];

    

}//section

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

{

    return 1;

}//item个数

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

{

    return dataArray.count;

    

}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

{

    NSLog(@"--indexPath.row--%ld",indexPath.row);

    NSLog(@"---indexpath.section--%ld",indexPath.section);

    photoCollectionViewCell *cell = (photoCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"photo" forIndexPath:indexPath];

    cell.tag=indexPath.row;

    

    

    //图片

    cell.photoImage.image=dataArray[indexPath.row];

    

    

    // 删除按钮

    cell.deleteBtn.tag =indexPath.row;

    cell.deleteBtn.hidden=YES;

    [cell.deleteBtn addTarget:self action:@selector(doClickDeleteButton:) forControlEvents:UIControlEventTouchUpInside];

    

    

    //增加按钮

    if (indexPath.row == dataArray.count -1) {

        cell.addBtn.hidden = NO;

    }else

    {

        cell.addBtn.hidden = YES;

    }

    [cell.addBtn addTarget:self action:@selector(doClickAddButton:) forControlEvents:UIControlEventTouchUpInside];

    

    

    

    // 长按删除

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc ] initWithTarget:self action:@selector(longPressedAction)];

    [cell.contentView addGestureRecognizer:longPress];

    return cell;

 

}#pragma -mark -doClickActions//删除按钮

-(void)doClickDeleteButton:(UIButton *)btn

{

    NSLog(@"-----doClickDeleteButton-------");

    UIAlertView *alert = [[UIAlertView alloc ] initWithTitle:@"提示" message:@"您确定要删除吗?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];

    deleteIndex = btn.tag;

    [alert show];

    

    NSLog(@"---delete--dataArray---%@",dataArray);

}//增加按钮

-(void)doClickAddButton:(UIButton *)btn

{

    NSLog(@"-----doClickAddButton-------");

    if (wobble) {

        // 如果是编辑状态则取消编辑状态        [self cancelWobble];

        

    }else{

        //不是编辑状态,添加图片

        if (dataArray.count > Photo) {

            UIAlertView *alert = [[UIAlertView alloc ] initWithTitle:@"提示" message:@"最多支持8个" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];

            [alert show];

        }else

        {

            UIActionSheet *actionSheet = [[UIActionSheet alloc]

                                          initWithTitle:nil

                                          delegate:(id)self

                                          cancelButtonTitle:@"取消"

                                          destructiveButtonTitle:nil

                                          otherButtonTitles:@"拍照", @"我的相册",nil];

            actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;

            [actionSheet showInView:self.view];

        }

    }

    

    NSLog(@"---add--dataArray---%@",dataArray);

 

}//长按删除

-(void)longPressedAction

{

    NSLog(@"-----longPressedAction-------");

    

    wobble = YES;

    NSArray *array =  [_collectionView subviews];

    

    for (int i = 0; i < array.count; i ++) {

         if ([array[i] isKindOfClass:[photoCollectionViewCell class]]) {

            photoCollectionViewCell *cell = array[i];

            if (cell.addBtn.hidden) {

                cell.deleteBtn.hidden = NO;

            }

            else

            {

                cell.deleteBtn.hidden = YES;

                cell.photoImage.image = [UIImage imageNamed:@"ensure"];

                cell.tag = 999999;

            }

            

            // 晃动动画

            [self animationViewCell:cell];

        }

    }

 

}

// 取消晃动

-(void)cancelWobble

{

    wobble = NO;

    NSArray *array =  [_collectionView subviews];

    for (int i = 0; i < array.count; i ++) {

        if ([array[i] isKindOfClass:[photoCollectionViewCell class]]) {

            photoCollectionViewCell *cell = array[i];

            cell.deleteBtn.hidden =  YES;

            if (cell.tag == 999999) {

               cell.photoImage.image = [UIImage imageNamed:@"plus"];

            }

            // 晃动动画

            [self animationViewCell:cell];

        }

    }

}

// 晃动动画

-(void)animationViewCell:(photoCollectionViewCell *)cell

{

    //摇摆

    if (wobble){

        cell.transform = CGAffineTransformMakeRotation(-0.1);

        

        [UIView animateWithDuration:0.08

                              delay:0.0

                            options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionCurveLinear

                         animations:^{

                             cell.transform = CGAffineTransformMakeRotation(0.1);

                         } completion:nil];

    }

    else{

        

        [UIView animateWithDuration:0.25

                              delay:0.0

                            options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseOut

                         animations:^{

                             cell.transform = CGAffineTransformIdentity;

                         } completion:nil];

    }

}

#pragma -mark -UIActionSheetDelegate

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

{

    if (buttonIndex == 0) {

        [self openCamera];

    }else if(buttonIndex == 1) {

        [self openPics];

    }

}

 

 

#pragma -mark -UIAlertViewDelegate

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    if (buttonIndex == 1) {

        [dataArray removeObjectAtIndex:deleteIndex];

        NSIndexPath *path =  [NSIndexPath indexPathForRow:deleteIndex inSection:0];

        [_collectionView deleteItemsAtIndexPaths:@[path]];

        

        // 如果删除完,则取消编辑

        if (dataArray.count == 1) {

            [self cancelWobble];

            

        }

        // 没有删除完,执行晃动动画

        else

        {

            [self longPressedAction];

        }

    }

}

#pragma -mark -camera

// 打开相机

- (void)openCamera {

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])

    {

        if (_imagePicker == nil) {

            _imagePicker =  [[UIImagePickerController alloc] init];

        }

        _imagePicker.delegate = (id)self;

        _imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

        _imagePicker.showsCameraControls = YES;

        _imagePicker.allowsEditing = YES;

        [self.navigationController presentViewController:_imagePicker animated:YES completion:nil];

    }

}

 

// 打开相册

- (void)openPics {

    if (_imagePicker == nil) {

        _imagePicker = [[UIImagePickerController alloc] init];

    }

    _imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    _imagePicker.allowsEditing = YES;

    _imagePicker.delegate = (id)self;

    [self presentViewController:_imagePicker animated:YES completion:NULL];

}

 

// 选中照片

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    

    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

    

    [_imagePicker dismissViewControllerAnimated:YES completion:NULL];

    _imagePicker = nil;

    

    // 判断获取类型:图片

    if ([mediaType isEqualToString:@"public.image"]){

        UIImage *theImage = nil;

        

        // 判断,图片是否允许修改

        if ([picker allowsEditing]){

            //获取用户编辑之后的图像

            theImage = [info objectForKey:UIImagePickerControllerEditedImage];

        } else {

            // 照片的元数据参数

            theImage = [info objectForKey:UIImagePickerControllerOriginalImage] ;

            

        }

        [dataArray insertObject:theImage atIndex:0];

        

        NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0];

        [_collectionView insertItemsAtIndexPaths:@[path]];

    }

}

 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    [picker dismissViewControllerAnimated:YES completion:NULL];

}

// 判断设备是否有摄像头

- (BOOL) isCameraAvailable{

    return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

}

 

#pragma mark - 相册文件选取相关

// 相册是否可用

- (BOOL) isPhotoLibraryAvailable{

    return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary];

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

 

 

 

photoCollectionViewCell.h

 

 

#import <UIKit/UIKit.h>

@interface photoCollectionViewCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UIButton *addBtn;

@property (weak, nonatomic) IBOutlet UIImageView *photoImage;

@property (weak, nonatomic) IBOutlet UIButton *deleteBtn;

@end

 

 

 

photoCollectionViewCell.m

 

 

#import "photoCollectionViewCell.h"

@implementation photoCollectionViewCell

- (id)initWithFrame:(CGRect)frame

{

    self = [super initWithFrame:frame];

    if (self)

    {

        // 初始化时加载collectionCell.xib文件

        NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"photoCollectionViewCell" owner:self options:nil];

        

        // 如果路径不存在,return nil

        if (arrayOfViews.count < 1)

        {

            return nil;

        }

        // 如果xib中view不属于UICollectionViewCell类,return nil

        if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]])

        {

            return nil;

        }

        // 加载nib

        self = [arrayOfViews objectAtIndex:0];

    }

    return self;

}

 

- (void)awakeFromNib {

    // Initialization code}

@end

希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IOS频道都能找到!

本文由 @安安 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程