首页 > 代码库 > iOS 选取上传图片界面

iOS 选取上传图片界面

  1 //  2 //  MainViewController.m  3 //  AddPhoto  4 //  5 //  Created by ChenJungang on 14/11/20.  6 //  Copyright (c) 2014年 ChenJungang. All rights reserved.  7 //  8   9 #import "MainViewController.h" 10 #import "CustomFlowLayout.h" 11 #import "PhotoCell.h" 12 #import "ResuableView.h" 13 #import <MobileCoreServices/MobileCoreServices.h> 14 #import "DetailViewController.h" 15  16  17 #define kImage              @"kImage" 18 #define kImageData          @"kImageData" 19 #define kImageReferenceUrl  @"kImageReferenceUrl" 20  21  22 static NSString *itemIdentifier = @"ItemIdentifier"; 23 static NSString *footerReuseId = @"footerReuseId"; 24  25 @interface MainViewController ()<UICollectionViewDataSource,UICollectionViewDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate,ResuableViewDelegate,UIActionSheetDelegate> 26  27 @property (strong, nonatomic)UICollectionView   *collectionView; 28 @property (strong, nonatomic)CustomFlowLayout   *customFlowLayout; 29 @property (strong, nonatomic)NSMutableArray     *imageArray; 30 @property (strong, nonatomic)NSIndexPath        *indexPath; 31  32 @end 33  34 @implementation MainViewController 35  36 - (instancetype)init{ 37     self = [super init]; 38     if (self) { 39         _imageArray = [NSMutableArray array]; 40     } 41     return self; 42 } 43  44 - (void)viewDidLoad { 45     [super viewDidLoad]; 46     // Do any additional setup after loading the view from its nib. 47     self.title = @"add photo"; 48      49     _customFlowLayout = [CustomFlowLayout new]; 50     _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(10, 64, [[UIScreen mainScreen] bounds].size.width - 20, 60) 51                                          collectionViewLayout:_customFlowLayout]; 52     _collectionView.backgroundColor = [UIColor whiteColor]; 53      54     if( ([[[UIDevice currentDevice] systemVersion] doubleValue]>=7.0)) { 55         self.edgesForExtendedLayout = UIRectEdgeNone; 56     } 57      58     [self.collectionView registerClass:[PhotoCell class] 59             forCellWithReuseIdentifier:itemIdentifier]; 60  61     [self.collectionView registerClass:[ResuableView class] 62             forSupplementaryViewOfKind:UICollectionElementKindSectionFooter 63                    withReuseIdentifier:footerReuseId]; 64      65     _collectionView.dataSource = self; 66     _collectionView.delegate = self; 67      68     [self.view addSubview:_collectionView]; 69 } 70  71 #pragma mark - UICollectionViewDataSource 72 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 73 { 74     return [_imageArray count]; 75 } 76  77 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 78 { 79     PhotoCell *cell =  80     [collectionView dequeueReusableCellWithReuseIdentifier:itemIdentifier 81                                               forIndexPath:indexPath]; 82      83     if ([_imageArray count] != 0) { 84         cell.showImageView.image = _imageArray[indexPath.row][kImage]; 85     } 86      87     return cell; 88 } 89  90 #pragma mark - UICollectionViewDelegate 91  92 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ 93     NSLog(@"row : %d",indexPath.row); 94      95      96     _indexPath = indexPath; 97     UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"操作" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"删除" otherButtonTitles:@"查看", nil]; 98     [actionSheet showInView:self.view]; 99     100 }101 102 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{103     104     ResuableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter105                                                                   withReuseIdentifier:footerReuseId106                                                                          forIndexPath:indexPath];107     _indexPath = indexPath;108     footerView.delegate = self;109 110     return footerView;111 }112 113 #pragma mark - UIActionSheetDelegate114 115 - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{116     117     switch (buttonIndex) {118         case 0:{119             if ([_imageArray count] != 0) {120                 [_imageArray removeObjectAtIndex:_indexPath.row];121                 [self.collectionView reloadData];122             }123             break;124         }125         case 1:{126             DetailViewController *detailVC = [[DetailViewController alloc] init];127             detailVC.image = _imageArray[_indexPath.row][kImage];128             [self presentViewController:detailVC animated:YES completion:nil];129             break;130         }131         default:132             break;133     }134 }135 136 137 #pragma mark - UIImagePickerControllerDelegate138 139 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{140     if ([[info objectForKey:UIImagePickerControllerMediaType] isEqualToString:(NSString *)kUTTypeImage]) {141         142         if ([_imageArray count] != 0) {143             for (NSDictionary *dic in _imageArray) {144                 if ([[info objectForKey:UIImagePickerControllerReferenceURL] isEqual:[dic objectForKey:kImageReferenceUrl]]) {145                     return [self dismissViewControllerAnimated:YES completion:^{146                         [MBHUDHelper showWarningWithText:@"该图片已经选择"];147                     }];148                 }149             }150         }151         //取出选中图片的信息152         UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];153         NSData *imageData = http://www.mamicode.com/UIImageJPEGRepresentation(image, 1.0);154         NSString *referenceUrl = [info objectForKey:UIImagePickerControllerReferenceURL];155         156         NSDictionary *imageInfoDic = @{kImage:image, kImageData:imageData, kImageReferenceUrl:referenceUrl};157         158         [_imageArray addObject:imageInfoDic];159         [self.collectionView reloadData];160         161         //滚动到最右边162         if ([_imageArray count] != 0) {163                     [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:[_imageArray indexOfObject:[_imageArray lastObject]] inSection:0] atScrollPosition:UICollectionViewScrollPositionRight animated:YES];164         }165     }166     [picker dismissViewControllerAnimated:YES completion:nil];167 }168 169 170 #pragma mark - ResuableViewDelegate171 172 - (void)clickAddPhotoBtnAction{173     [self getPhotoFromPhotoLibrary:UIImagePickerControllerSourceTypePhotoLibrary];174 }175 176 -(void)getPhotoFromPhotoLibrary:(UIImagePickerControllerSourceType)sourceType177 {178     NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:sourceType];179     if([UIImagePickerController isSourceTypeAvailable:sourceType] && mediaTypes.count > 0)180     {181         NSArray *mediaTypes=[UIImagePickerController availableMediaTypesForSourceType:sourceType];182         UIImagePickerController *picker = [[UIImagePickerController alloc] init];183         picker.mediaTypes = mediaTypes;184         picker.delegate = self;185         picker.allowsEditing = YES;186         picker.sourceType = sourceType;187         NSString *requiredMediaType = (NSString *)kUTTypeImage;188         NSArray *arrMediaTypes = [NSArray arrayWithObject:requiredMediaType];189         [picker setMediaTypes:arrMediaTypes];190         [self presentViewController:picker animated:YES completion:nil];191     }else{192         UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"错误信息!" message:@"当前设备不支持拍摄功能" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles: nil];193         [alert show];194     }195 }196 197 - (void)didReceiveMemoryWarning {198     [super didReceiveMemoryWarning];199     // Dispose of any resources that can be recreated.200 }201 202 203 @end
MainViewController.m
 1 // 2 //  CustomFlowLayout.m 3 //  AddPhoto 4 // 5 //  Created by ChenJungang on 14/11/20. 6 //  Copyright (c) 2014年 ChenJungang. All rights reserved. 7 // 8  9 #import "CustomFlowLayout.h"10 11 @implementation CustomFlowLayout12 - (instancetype)init13 {14     self = [super init];15     if (self)16     {17         self.itemSize                = CGSizeMake(50, 50);                  // 单元格尺寸18         self.sectionInset            = UIEdgeInsetsMake(0, 0, 0, 0);        // 单元格边缘19         self.minimumInteritemSpacing = 2.0f;                                // 横排单元格最小间隔20         self.minimumLineSpacing      = 2.0f;                                // 单元格最小行间距21         self.scrollDirection = UICollectionViewScrollDirectionHorizontal;   // 滚动方向22         self.footerReferenceSize     = CGSizeMake(50, 50);                  // footerView 的尺寸23         24     }25     return self;26 }27 28 @end
CustomFlowLayout.m
 1 // 2 //  PhotoCell.m 3 //  AddPhoto 4 // 5 //  Created by ChenJungang on 14/11/20. 6 //  Copyright (c) 2014年 ChenJungang. All rights reserved. 7 // 8  9 #import "PhotoCell.h"10 11 @implementation PhotoCell12 13 - (void)awakeFromNib {14     // Initialization code15 }16 17 - (id)initWithFrame:(CGRect)frame18 {19     self = [super initWithFrame:frame];20     if (self)21     {22         self.backgroundColor = [UIColor whiteColor];23         24         CGRect rect = self.bounds;25         rect.origin.x    += 3;26         rect.origin.y    += 3;27         rect.size.height -= 6;28         rect.size.width  -= 6;29         30         _showImageView = [[UIImageView alloc] initWithFrame:rect];31         _showImageView.contentMode = UIViewContentModeScaleAspectFill;32         33         _showImageView.layer.masksToBounds = YES;34         [self addSubview:_showImageView];35     }36     37     return self;38 }39 40 @end
PhotoCell.m
 1 // 2 //  ResuableView.h 3 //  AddPhoto 4 // 5 //  Created by ChenJungang on 14/11/20. 6 //  Copyright (c) 2014年 ChenJungang. All rights reserved. 7 // 8  9 #import <UIKit/UIKit.h>10 11 @protocol ResuableViewDelegate <NSObject>12 13 - (void)clickAddPhotoBtnAction;14 15 @end16 17 @interface ResuableView : UICollectionReusableView18 19 @property (nonatomic, strong) id<ResuableViewDelegate>delegate;20 21 @end
ResuableView.h
 1 // 2 //  ResuableView.m 3 //  AddPhoto 4 // 5 //  Created by ChenJungang on 14/11/20. 6 //  Copyright (c) 2014年 ChenJungang. All rights reserved. 7 // 8  9 #import "ResuableView.h"10 11 @interface ResuableView()12 @property (nonatomic, strong) UIButton  *addPhotoBtn;13 @end14 15 @implementation ResuableView16 17 -(instancetype)initWithFrame:(CGRect)frame{18     self = [super initWithFrame:frame];19     if (self) {20         21         self.backgroundColor = [UIColor whiteColor];22         23         CGRect rect = self.bounds;24         rect.origin.x    += 3;25         rect.origin.y    += 6;26         rect.size.height -= 12;27         rect.size.width  -= 6;28         29         _addPhotoBtn = [[UIButton alloc] initWithFrame:rect];30         _addPhotoBtn.contentMode = UIViewContentModeScaleAspectFill;31         [_addPhotoBtn setImage:[UIImage imageNamed:@"addImage.png"] forState:UIControlStateNormal];32         _addPhotoBtn.layer.masksToBounds = YES;33         [self addSubview:_addPhotoBtn];34         35         [_addPhotoBtn addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];36         37     }38     return self;39 }40 41 - (void)buttonAction:(id)sender{42     if ([_delegate respondsToSelector:@selector(clickAddPhotoBtnAction)]) {43         [_delegate clickAddPhotoBtnAction];44     }45 }46 47 @end
ResuableView.m

 

iOS 选取上传图片界面