5

Tôi cần hiển thị lớp phủ hình ảnh (khung) trên AVCaptureVideoPreviewLayer. Làm cách nào tôi có thể thực hiện việc này?Cách hiển thị lớp phủ trên AVCaptureVideoPreviewLayer

-(void) viewDidAppear:(BOOL)animated 
{ 
    AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
    session.sessionPreset = AVCaptureSessionPresetPhoto; 
    [session commitConfiguration]; 

    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]; 

} 

Thêm chế độ xem mới qua lớp đầu ra video không hoạt động. Lớp xem trước xuất hiện ở đầu tất cả các chế độ xem.

xem hệ thống cấp bậc của tôi:

  • MainView
    • OverlayView
    • VideoOutputView

My frame appears under the video output view

Trả lời

-5

Được giải quyết bằng cách tạo tất cả chế độ xem theo chương trình (không có bảng phân cảnh)

+0

bạn có chia sẻ mã của mình để tìm câu trả lời không? –

3

Tôi đã tìm ra. Bí quyết là phải có chế độ xem video quét vì đó là chế độ xem riêng mà không có gì bên trong nó (không có bản xem trước) và sau đó thêm các lớp phủ dưới dạng số ảnh anh chị em (thay vì xem trẻ em).

Giải pháp này hoạt động trong Trình tạo giao diện mà không cần phải sử dụng để tạo các chế độ xem theo chương trình.

0

Hiện đang sử dụng iOS 8.4 và Xcode 6.4

Nó làm việc cho tôi thêm hai lớp con để self.view, cả hai được thêm vào trong kịch bản này. Trong đề cương tài liệu bây giờ tôi có: (theo thứ tự là rất quan trọng - tiếc là quan điểm thấp hơn được rút ra trên đầu trang của các quan điểm trên chúng - không gây nhầm lẫn nào cả Hãy chắc chắn rằng overlayView không đục.)

View 
    previewView 
    overlayView 

tôi giữ cửa cho cả subviews trong mã của tôi vì vậy tôi có thể thêm AVCaptureVideoPreviewLayer trực tiếp như một lớp con của previewView và thiết lập datasource của tôi overlayView

Đối overlayView tôi đã thực hiện một lớp con tùy chỉnh của UIView vì vậy tôi có thể thực hiện drawRect:

Trong drawRect: Tôi đã có thể vẽ hình chữ nhật xung quanh mã vạch đã chụp được xác định trong số AVCaptureSession trong khi mã vẫn đang chạy và hiển thị bản xem trước.

5

Mặc dù câu hỏi này được hỏi N năm trước, tôi muốn chia sẻ câu trả lời chính xác của mình. Sau vài phút, tôi đã có thể hiểu được những gì Gujamin nói. Thật vậy, giải pháp có thể làm điều đó theo chương trình. Nhưng trong trường hợp bạn đang làm trong XIB hoặc Storyboard, hãy kiểm tra loại phân cấp này. Không đặt bất kỳ subviews để CameraPreviewView của bạn (uiview mà lớp của nó sẽ là máy ảnh).

enter image description here