• 类似微信选择添加删除图片的demo


    仿写了一个类似微信选择添加图片的demo,非常容易添加到工程当中,github地址https://github.com/wubianxiaoxian/AddPicture,主要用到了collectionview

      1 //
      2 //  ViewController.m
      3 //  KevinCollectionView
      4 //
      5 //  Created by Kevin Sun on 15/12/14.
      6 //  Copyright © 2015年 Kevin Sun. All rights reserved.
      7 //
      8 
      9 #import "ViewController.h"
     10 #import "CollectionViewCell.h"
     11 #import "KevinPreViewController.h"
     12 
     13 static NSMutableArray *currentImages;
     14 
     15 @interface ViewController ()<UICollectionViewDataSource,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>{
     16     UICollectionView *_collectionView;
     17     
     18 }
     19 
     20 
     21 @end
     22 
     23 @implementation ViewController
     24 - (void)viewDidLoad {
     25     [super viewDidLoad];
     26     self.view.backgroundColor=[UIColor whiteColor];
     27     UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc]init];
     28     layout.minimumLineSpacing = 0.0f;
     29     layout.minimumInteritemSpacing = 0.0f;
     30 
     31     _collectionView=[[UICollectionView alloc]initWithFrame:self.view.frame collectionViewLayout:layout];
     32 //    [_collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
     33 //        make.left.right.top.bottom.mas_equalTo(0);
     34 //    }];
     35     self.navigationController.navigationBar.barTintColor=[UIColor clearColor];
     36 
     37     [self.view addSubview:_collectionView];
     38     _collectionView.backgroundColor=[UIColor whiteColor];
     39     _collectionView.delegate=self;
     40     _collectionView.dataSource=self;
     41     [_collectionView registerNib:[UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CellIdentifier"];
     42     if(currentImages ==nil)
     43     {
     44         currentImages=[[NSMutableArray alloc] init];
     45     }
     46 
     47     
     48     
     49     // Do any additional setup after loading the view, typically from a nib.
     50 }
     51 -(void)viewWillAppear:(BOOL)animated{
     52     [_collectionView reloadData];
     53 }
     54 #pragma mark -UIColletionDelegate
     55 //指定setion个数
     56 -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
     57     return 1;
     58 }
     59 //指定section中的colletionviewCELL的个数
     60 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
     61     return currentImages.count==0?1:currentImages.count+1;
     62 }
     63 //配置section中的collectionviewcell的展示
     64 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
     65     CollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"CellIdentifier" forIndexPath:indexPath];
     66 //    cell.backgroundColor=[UIColor redColor];
     67     
     68     UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width/4-10, self.view.frame.size.width/4-10)];
     69     NSLog(@"currentImages.count %ld",currentImages.count);
     70     for(UIView *view in [cell.contentView subviews])
     71     {
     72         [view removeFromSuperview];
     73     }
     74     if(currentImages.count==0||indexPath.row==currentImages.count)
     75     {          NSLog(@"我加载了设置加好图片");
     76         imageView.image=nil;
     77 //        [cell.contentView removeFromSuperview:imageView];
     78         imageView.image=[UIImage imageNamed:@"ico.ooopic.com.png"];
     79     }
     80     else{
     81         NSLog(@"我加载了设置背景图片");
     82         
     83         while ([cell.contentView.subviews lastObject] != nil) {
     84             [(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];
     85         }
     86         imageView.image=currentImages[indexPath.row];
     87     }
     88     
     89 //    imageView.contentMode=UIViewContentModeScaleAspectFill;
     90     [cell.contentView addSubview:imageView];
     91     return  cell;
     92 return cell;
     93     
     94 }
     95 //指定单元格的大小
     96 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
     97      return CGSizeMake(self.view.frame.size.width/4-10, self.view.frame.size.width/4-10);
     98 
     99 }
    100 ////设置每个cell上下左右相距
    101 //- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
    102 //    return UIEdgeInsetsMake(0, 0, 0, 0);
    103 //}
    104 ////设置最小行间距 也就是前一行和后一行的中间最小间隔
    105 //- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
    106 //    return 0.0f;
    107 //}
    108 //- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
    109 //    return 0.0f;
    110 //}
    111 #pragma mark 点击cell
    112 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    113     if(indexPath.row==currentImages.count)
    114     {
    115         UIActionSheet *action=[[UIActionSheet alloc] initWithTitle:@"选取照片" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:nil otherButtonTitles:@"从摄像头选取", @"从图片库选择",nil];
    116         [action showInView:self.view];
    117     }
    118     else
    119     {
    120         [KevinPreViewController setPreviewImage:currentImages[indexPath.row]];
    121         [self.navigationController pushViewController:[[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"PreviewVC"] animated:YES];
    122     }
    123 
    124 }
    125 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    126     [picker dismissViewControllerAnimated:YES completion:nil];
    127     UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
    128     NSData *tempData=UIImageJPEGRepresentation(image, 0.5f);
    129     image=[UIImage imageWithData:tempData];
    130     if(currentImages ==nil)
    131     {
    132         currentImages=[[NSMutableArray alloc] init];
    133     }
    134     [currentImages addObject:image];
    135     [_collectionView reloadData];
    136     // [self saveImage:image withName:@""]
    137 }
    138 -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    139     [picker dismissViewControllerAnimated:YES completion:nil];
    140 }
    141 -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    142     
    143     switch (buttonIndex) {
    144         case 0:
    145             [self openCamera];
    146             break;
    147         case 1:
    148             [self openLibary];
    149             break;
    150         default:
    151             break;
    152     }
    153 }
    154 -(void)openCamera{
    155     //UIImagePickerControllerSourceType *type=UIImagePickerControllerSourceTypeCamera;
    156     if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    157     {
    158         UIImagePickerController *picker=[[UIImagePickerController alloc] init];
    159         picker.delegate=self;
    160         picker.sourceType=UIImagePickerControllerSourceTypeCamera;
    161         picker.allowsEditing=YES;
    162         [self presentViewController:picker animated:YES completion:nil];
    163         
    164     }
    165 }
    166 -(void)openLibary{
    167     if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
    168     {
    169         UIImagePickerController *picker=[[UIImagePickerController alloc] init];
    170         picker.delegate=self;
    171         picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
    172         picker.allowsEditing=YES;
    173         [self presentViewController:picker animated:YES completion:nil];
    174         
    175     }
    176     
    177 }
    178 -(void) saveImage:(UIImage *)image withName:(NSString *)name
    179 {
    180     NSData *imageData=UIImageJPEGRepresentation(image, 0.5);
    181     NSString *path=[NSTemporaryDirectory() stringByAppendingPathComponent:name];
    182     [imageData writeToFile:path atomically:YES];
    183     
    184 }
    185 +(void)deleteSelectedImage:(NSInteger)index
    186 {
    187     if(currentImages!=nil)
    188         [currentImages removeObjectAtIndex:index];
    189 }
    190 +(void)deleteSelectedImageWithImage:(UIImage *)image{
    191     if(currentImages!=nil)
    192         [currentImages removeObject:image];
    193     
    194 }
    195 
    196 - (void)didReceiveMemoryWarning {
    197     [super didReceiveMemoryWarning];
    198     // Dispose of any resources that can be recreated.
    199 }
    200 
    201 @end

    github地址 https://github.com/wubianxiaoxian/AddPicture

  • 相关阅读:
    win10安装node后npm 报错
    nodejs 图片的像素级别处理
    vue 等比例截图组件,支持缩放和旋转
    撸一个 vue 的截图组件,按比例截取
    原生 js 录屏功能
    Mongodb命令行导入导出数据
    Linux 下配置 iSCSI 客户端
    基于 Docker 实现 DevOps 的一些探索
    10 张图带你深入理解 Docker 容器和镜像
    浅谈 Docker 安全合规建设
  • 原文地址:https://www.cnblogs.com/sunkaifeng/p/5070313.html
Copyright © 2020-2023  润新知