カスタムを作成しましたUICollectionViewController
。
表示したいアルバムが 2 つあります。それぞれの機能は少し異なりますが、ビューは基本的に同じです (カスタム セル サイズなど)。このベースから、私が求めている特定の動作でViewController
カスタマイズされた 2 を継承しています。UICollectionViewController
遺産は
UICollectionViewController -> GalleyViewController (私の基本クラス) -> CameraAlbumViewController。
UICollectionViewController -> GalleyViewController (私の基本クラス) -> DifferentAlbumViewController
何らかの理由で、画面に中央のセルが表示されませんが、クリックすることはできます。セルのサイズを変更しようとしましたが、3 つのセルが表示されますが、セルの境界がオフになっています (セル間で選択でき、デリゲート メソッドが呼び出されています)。
継承が間違っているのではないかと考えて(おそらく基本クラスに何かが欠けている)、 の最も基本的な使用方法で新しいプロジェクトを作成し、UICollectionViewController
いくつかのチュートリアルに従いました。
まだ中央の細胞が見えない
このことから、おそらく絵コンテの何かが間違っていると思います。
私のコードはこれです:
#import "MyCollectionViewController.h"
#import <AssetsLibrary/AssetsLibrary.h>
@interface CollectionViewCell : UICollectionViewCell
// customized cell
@property (nonatomic,strong) UIImageView *imageView;
@end
@implementation CollectionViewCell
@synthesize imageView;
-(id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.imageView = [[UIImageView alloc] initWithFrame:frame];
[self.contentView addSubview:self.imageView];
}
return self;
}
@end
@interface MyCollectionViewController ()
// the collection view controller
@property (nonatomic,strong) NSMutableArray *photos;
@property (nonatomic,strong) ALAssetsLibrary *defaultLibrary;
@end
@implementation MyCollectionViewController
@synthesize photos,defaultLibrary;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
[self initAssets];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)initAssets
{
self.photos = [NSMutableArray new];
[self.photos removeAllObjects];
self.defaultLibrary = [[ALAssetsLibrary alloc] init];
[self.defaultLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
[group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
{
if (asset) {
[self.photos addObject:asset];
}
}];
if (group == nil)
{
[self.collectionView reloadData];
}
} failureBlock:^(NSError *error)
{
NSLog(@"Error");
}];
}
#pragma mark -
#pragma mark CollectionViewDelegates
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.photos.count;
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
ALAsset *asset = [self.photos objectAtIndex:indexPath.row];
UIImage *im = [UIImage imageWithCGImage:[asset thumbnail]];
cell.imageView.image = im;
return cell;
}
-(CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(100, 100);
}
@end
シミュレーターからのストーリー ボード、カメラ アルバムのスクリーンショット