Note that there are some explanatory texts on larger screens.

plurals
  1. POAdding a UICollectionView overlay to AVCam
    primarykey
    data
    text
    <p>So I Have an AVCamViewController that I am using to take pictures. The background is a live image feed and Overlaid on top is a button to take a picture and a UIImageView to display the picture taken. These both work. I want to have a side scrolling collectionView to display all of the pictures taken but I can't seem to add the collectionView to the overlay View, even though adding the buttons and UIImageView were no problem. Here is the implementation code for the view controller's view did load method:</p> <pre><code>- (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:&amp;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]; </code></pre> <p>}</p> <p>Any Ideas why the button and UIImageView show up but the collectionView doesn't?</p> <p>Here is my header file:</p> <pre><code>#import &lt;UIKit/UIKit.h&gt; #import "CaptureSessionManager.h" @interface AVOverlayViewController : UIViewController &lt;UICollectionViewDataSource,UICollectionViewDelegateFlowLayout&gt; @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 </code></pre> <p>Also, these are the delegate methods I am calling in the ViewController's implementation file:</p> <pre><code>- (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; } </code></pre> <p>Both of these delegate methods are never being called. Any help is much appreciated! Thanks!</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload