所以我有一个我用来拍照的AVCamViewController。背景是实时图像输入,顶部覆盖是一个拍照的按钮和一个UIImageView来显示拍摄的照片。这两个都有效。我想有一个侧滚动collectionView来显示所有拍摄的照片,但我似乎无法将collectionView添加到叠加视图,即使添加按钮和UIImageView没有问题。这是视图控制器的视图执行加载方法的实现代码:
- (void)viewDidLoad {
_imagesTaken = [[NSMutableArray alloc] init];
_vImagePreview = [[UIView alloc] initWithFrame:self.view.bounds];
_vImage = [[UIImageView alloc] initWithFrame:CGRectMake(50, 50, 50, 50)];
UIButton *shutter = [[UIButton alloc] initWithFrame:CGRectMake(100,500,50,50)];
[shutter addTarget:self action:@selector(takePicture) forControlEvents:UIControlEventTouchUpInside];
[shutter setBackgroundColor:[UIColor greenColor]];
[_vImagePreview addSubview:shutter];
[_vImagePreview addSubview:_vImage];
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
[layout setItemSize:CGSizeMake(50, 50)];
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(10, 400, 315, 60) collectionViewLayout:layout];
_collectionView.backgroundColor = [UIColor redColor];
_collectionView.pagingEnabled = YES;
_collectionView.delegate = self;
_collectionView.dataSource = self;
//[_collectionView setDataSource:self];
//[_collectionView setDelegate:self];
[_collectionView registerClass:[PhotoCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[_vImagePreview addSubview:_collectionView];
[_collectionView reloadData];
[self.view addSubview:_vImagePreview];
[super viewDidLoad];
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetMedium;
//CALayer *viewLayer = self.vImagePreview.layer;
//NSLog(@"viewLayer = %@", viewLayer);
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
captureVideoPreviewLayer.frame = self.vImagePreview.bounds;
[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer];
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {
// Handle the error appropriately.
NSLog(@"ERROR: trying to open camera: %@", error);
}
[session addInput:input];
_stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil];
[_stillImageOutput setOutputSettings:outputSettings];
[session addOutput:_stillImageOutput];
[session startRunning];
}
任何想法为什么按钮和UIImageView出现但collectionView没有?
这是我的头文件:
#import <UIKit/UIKit.h>
#import "CaptureSessionManager.h"
@interface AVOverlayViewController : UIViewController <UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
@property (retain) CaptureSessionManager *captureManager;
@property (nonatomic, strong) UILabel *scanningLabel;
@property (nonatomic, strong) NSMutableArray *imagesTaken;
@property(nonatomic, retain) AVCaptureStillImageOutput *stillImageOutput;
@property(nonatomic, retain) IBOutlet UIView *vImagePreview;
@property(nonatomic, retain) IBOutlet UIImageView *vImage;
@property (nonatomic, retain) IBOutlet UICollectionView *collectionView;
@end
另外,这些是我在ViewController的实现文件中调用的委托方法:
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return [_imagesTaken count];
NSLog(@"%d added to collection view",[_imagesTaken count]);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
PhotoCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"PhotoCellIdentifier" forIndexPath:indexPath];
UIImage *fromCamera = [_imagesTaken objectAtIndex:indexPath.row];
[[cell imageView] setImage:fromCamera];
cell.backgroundColor=[UIColor greenColor];
return cell;
}
永远不会调用这两种委托方法。任何帮助深表感谢!谢谢!
答案 0 :(得分:0)
collectionView是@property有原因吗?为什么不实现类似的东西:
@interface AVOverlayViewController : UIViewController <UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
{
UICollectionView *collectionView;
}
如果这没有用,你可以尝试(而不是在viewDidLoad中设置大小)在委托中实现 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
。
我也会说开始很小,只需先装入单元格,然后看看你是否可以开始工作。然后,一旦确定正确实现了集合,请添加所需的图像。我首先加载空白绿色单元格,然后将集合视图的背景颜色设置为明显的颜色。