UIScrollView отображение камеры

Я создал вид камеры, который будет отображаться на экране, создав AVCaptureVideoPreviewLayer, и теперь я хотел бы, чтобы он отображался внутри моего вида прокрутки. В настоящее время мой вид прокрутки настроен для обработки UIImageViews, но не уровня камеры. Вот как все это работает вместе:

// Настройка вида камеры [self setCaptureManager: [[CaptureManager alloc] init]];

[[self captureManager] addVideoInput];

[[self captureManager] addVideoPreviewLayer];
CGRect layerRect = [[[self view] layer] bounds];
[[[self captureManager] previewLayer] setBounds:layerRect];
[[[self captureManager] previewLayer] setPosition:CGPointMake(CGRectGetMidX(layerRect),
                                                              CGRectGetMidY(layerRect))];
[[[self view] layer] addSublayer:[[self captureManager] previewLayer]];

[[captureManager captureSession] startRunning];


int PageCount = 2;
NSMutableArray *arrImageName =[[NSMutableArray alloc]initWithObjects:settingsView,captureManager,nil];
UIScrollView *scroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scroller.scrollEnabled=YES;
scroller.backgroundColor = [UIColor clearColor];
[scroller setShowsHorizontalScrollIndicator:NO];
scroller.pagingEnabled = YES;
scroller.bounces = NO;
scroller.delegate = self;
[self.view addSubview:scroller];
int width=scroller.frame.size.width;
int xPos=0;
for (int i=0; i<PageCount; i++)
{
    UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(xPos, 0, scroller.frame.size.width, scroller.frame.size.height)];
    UIView *view2 = [arrImageName objectAtIndex:i];
    [view1 addSubview:view2];
    [scroller addSubview:view1];
    scroller.contentSize = CGSizeMake(width, 0);
    width +=scroller.frame.size.width;
    xPos  +=scroller.frame.size.width;
}

Менеджер захвата обрабатывает AVCaptureVideoPreviewLayer, и все это работает нормально и отображается само по себе. Я пытаюсь отобразить его внутри моего scrollView, поэтому я закомментировал CGRect layerRect и вместо этого пытаюсь отобразить его в моем массиве на scrollView. Внизу scrollView у меня есть UIImageView, который берет массив и отображает его, однако это явно не работает, поскольку камера не является изображением. Что я могу изменить или посмотреть внизу, чтобы это работало? Поменять его на UIView? Спасибо.


person Inovize    schedule 18.10.2013    source источник


Ответы (1)


После цикла просто создайте и добавьте UIView внизу вашего UIScrollView (с правильной позицией и прямоугольником). Затем добавьте слой предварительного просмотра видео в качестве подслоя к представлению, добавленному в scrollView. Удачи!

РЕДАКТИРОВАТЬ хорошо, попробуйте следующее:

[[self captureManager] addVideoInput];

[[self captureManager] addVideoPreviewLayer];
CGRect layerRect = [[[self view] layer] bounds];
[[[self captureManager] previewLayer] setBounds:layerRect];
[[[self captureManager] previewLayer] setPosition:CGPointMake(CGRectGetMidX(layerRect),
                                                              CGRectGetMidY(layerRect))];
UIView *captureView = [[UIView alloc] initWithFrame:self.view.bounds];
[[captureView layer] addSublayer:[[self captureManager] previewLayer]];

[[captureManager captureSession] startRunning];


int PageCount = 2;
NSMutableArray *arrImageName =[[NSMutableArray alloc]initWithObjects:settingsView,captureView,nil];
UIScrollView *scroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scroller.scrollEnabled=YES;
scroller.backgroundColor = [UIColor clearColor];
[scroller setShowsHorizontalScrollIndicator:NO];
scroller.pagingEnabled = YES;
scroller.bounces = NO;
scroller.delegate = self;
[self.view addSubview:scroller];
int width=scroller.frame.size.width;
int xPos=0;
for (int i=0; i<PageCount; i++)
{
    UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(xPos, 0, scroller.frame.size.width, scroller.frame.size.height)];
    UIView *view2 = [arrImageName objectAtIndex:i];
    [view1 addSubview:view2];
    [scroller addSubview:view1];
    scroller.contentSize = CGSizeMake(width, 0);
    width +=scroller.frame.size.width;
    xPos  +=scroller.frame.size.width;
}
person Fahri Azimov    schedule 18.10.2013
comment
Привет! Спасибо, поэтому я отредактировал код и изменил его на UIView, и я близок, но получаю сообщение об ошибке 'NSInvalidArgumentException', reason: '-[CaptureManager superview]: Любые идеи? - person Inovize; 18.10.2013
comment
Это решило проблему супервизора, и он работает без ошибок, однако теперь он не отображает ничего, кроме белого экрана из моего viewController. Я думаю, что это близко! - person Inovize; 19.10.2013