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:UICollectionElementKindSectionFooter

105                                                                   withReuseIdentifier:footerReuseId

106                                                                          forIndexPath:indexPath];

107     _indexPath = indexPath;

108     footerView.delegate = self;

109 

110     return footerView;

111 }

112 

113 #pragma mark - UIActionSheetDelegate

114 

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 - UIImagePickerControllerDelegate

138 

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 = 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 - ResuableViewDelegate

171 

172 - (void)clickAddPhotoBtnAction{

173     [self getPhotoFromPhotoLibrary:UIImagePickerControllerSourceTypePhotoLibrary];

174 }

175 

176 -(void)getPhotoFromPhotoLibrary:(UIImagePickerControllerSourceType)sourceType

177 {

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 CustomFlowLayout

12 - (instancetype)init

13 {

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 PhotoCell

12 

13 - (void)awakeFromNib {

14     // Initialization code

15 }

16 

17 - (id)initWithFrame:(CGRect)frame

18 {

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 @end

16 

17 @interface ResuableView : UICollectionReusableView

18 

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 @end

14 

15 @implementation ResuableView

16 

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)