【代碼筆記】iOS-collectionView實現照片刪除,

來源:互聯網
上載者:User

【代碼筆記】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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.