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
时间: 2024-11-09 07:22:08