2015-10-06 21 views
5

Tôi đang làm việc trên một ứng dụng máy ảnh mà tôi đang phải hiển thị một camera bên enter image description hereSetting cameraViewTransform động dành cho iOS 8

Tôi đang sử dụng camView.cameraViewTransform = CGAffineTransformMakeScale(1.0, 1.0) ; nhưng nhận được kết quả khác nhau cho các thiết bị khác nhau và một thanh màu đen ở giữa thanh tab và Máy ảnh. Nếu tôi thay đổi giá trị của scaling, máy ảnh sẽ bị thu phóng quá mức. Bất kỳ sự giúp đỡ nào trong vấn đề này sẽ rất được đánh giá cao.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    [self prepareCamera]; 
} 

- (void)viewDidAppear:(BOOL)animated{ 
    [super viewDidAppear:NO]; 
    [self launchCamera]; 
} 

- (void)prepareCamera{ 
    camView = [[UIImagePickerController alloc] init]; 
    camView.delegate = self; 
    camView.sourceType = UIImagePickerControllerSourceTypeCamera; 
    camView.showsCameraControls = NO; 
    [self resizeCameraView]; 
} 


- (void)resizeCameraView{ 
    CGSize screenSize = self.view.bounds.size; 
    // set the aspect ratio of the camera 
    float heightRatio = 4.0f/3.0f; 
    // calculate the height of the camera based on the screen width 
    float cameraHeight = screenSize.width * heightRatio; 
    // calculate the ratio that the camera height needs to be scaled by 
    float scale = screenSize.height/cameraHeight; 
    // move the controller to the center of the screen 
    camView.cameraViewTransform = CGAffineTransformMakeTranslation(0, (screenSize.height - cameraHeight)/2.0); 
    // concatenate the scale transform 
    camView.cameraViewTransform = CGAffineTransformScale(camView.cameraViewTransform, scale, scale); 
} 

- (void)launchCamera{ 
     [camSubView addSubview:camView.view]; 
     [camView viewWillAppear:YES]; 
     [camView viewDidAppear:YES]; 
} 
+0

bạn có thể đăng một số mã về cách thiết lập chế độ xem camView không? – Istvan

+0

@Istvan cảm ơn vì đã tra cứu, tôi đã cập nhật mã nguồn. –

Trả lời

1

Câu hỏi là bạn muốn có kết quả. CGAffineTransformMakeScale (1.0.1.0) là tỷ lệ mặc định - vì vậy, điều này không thực hiện bất kỳ thay đổi nào. Máy ảnh trên tất cả các thiết bị của Apple có tỷ lệ khung hình 4: 3. Ngoài ra, tôi phải thừa nhận rằng chế độ xem máy ảnh mặc định có kích thước bằng chiều rộng màn hình với độ cao dẫn đến quảng cáo 4: 3 - đó là lý do tại sao bạn luôn có chế độ xem máy ảnh khác nhau.

Nếu bạn muốn có chế độ xem máy ảnh với chiều cao bằng chiều cao màn hình bạn cần thực hiện một số chuyển đổi affine. Dưới đây là ví dụ:

CGFloat cameraAspectRation = 4.0/3.0; 
CGFloat cameraViewStarterHeight = screenSize.width*cameraAspectRation; 
CGFloat cameraAdjustedYPosition = (screenSize.height - cameraViewStarterHeight)/2 - 20; 
CGFloat cameraScaleTransformCoef = screenSize.height/cameraViewStarterHeight; 

CGAffineTransform adjustedYPositionTransform = CGAffineTransformMakeTranslation(0, cameraAdjustedYPosition); 
CGAffineTransform adjustedScaleTransform = CGAffineTransformMakeScale(cameraScaleTransformCoef, cameraScaleTransformCoef); 

self.cameraViewTransform = CGAffineTransformConcat(adjustedYPositionTransform, adjustedScaleTransform); 

Nhưng theo cách này, khi bạn thấy chế độ xem máy ảnh sẽ bị "thu phóng". Hy vọng điều này sẽ giúp bạn hiểu được vấn đề của mình.

+0

Cảm ơn, nhưng mã của bạn là kết quả sau cho iPhone 6 https://www.dropbox.com/s/y8pgu07v97qm3mg/iPhone-6.png?dl=0 và iPhone 6 Plus https://www.dropbox.com/ s/ajy6vodoryccd7r/iPhone-6Plus.png?dl = 0 nó hoạt động tốt cho iPhone 5 –

+0

@DeepeshGairola Chỉ cần loại bỏ "-20" và nó sẽ tốt cho iPhone6 ​​và 6+. Tôi đã làm điều đó bởi vì tôi không có thanh trạng thái trên bộ điều khiển của tôi, nơi tôi sử dụng điều này. – Seliver

+0

@DeepeshGairola Ý tôi là dành cho iPhone 6 và 6+ sử dụng CGFloat cameraAdjustedYPosition = (screenSize.height - cameraViewStarterHeight)/2 – Seliver

3

Điều bạn đang cố gắng đạt được không được Apple hỗ trợ chính thức. Từ UIImagePickerController Class Reference:

Để sử dụng một bộ điều khiển chọn hình ảnh có chứa các điều khiển mặc định của nó, thực hiện các bước sau:

...

  1. hiện tại giao diện người dùng . Trên iPhone hoặc iPod touch, thực hiện thao tác này (toàn màn hình) bằng cách gọi phương thức presentViewController:animated:completion: của bộ điều khiển chế độ xem hiện hoạt, chuyển bộ điều khiển bộ chọn hình ảnh được định cấu hình của bạn làm bộ điều khiển chế độ xem mới.

    Trên iPad, nếu bạn chỉ định loại nguồn UIImagePickerControllerSourceTypeCamera, bạn có thể hiển thị trình chọn hình ảnh phương thức (toàn màn hình) hoặc bằng cách sử dụng cửa sổ bật lên. Tuy nhiên, Apple khuyến nghị bạn chỉ hiển thị giao diện camera ở chế độ toàn màn hình.

Những gì bạn có thể làm là trình bày các UIImagePickerController modally (toàn màn hình) và thêm các điều khiển tùy chỉnh với cameraOverlayView tài sản.

Giải pháp

Để đạt được những gì bạn muốn, bạn phải sử dụng AVFoundation và không UIImagePickerController. Thư viện AV Foundation cung cấp một cách mạnh mẽ hơn để chụp ảnh, cho phép bạn đặt chế độ xem máy ảnh bên trong ứng dụng của riêng bạn. Bạn có thể tìm thấy hướng dẫn tốt here hoặc một hướng dẫn mới here

+0

Cảm ơn bạn đã dành thời gian để xem xét vấn đề. Nếu những gì bạn đang nói là đúng thì làm thế nào đến ứng dụng CamFind đã thực hiện UIImagePickerController trong thanh tab bên. Đây là ảnh chụp màn hình của ứng dụng và từ những gì tôi có thể hiểu bằng cách chạy ứng dụng của họ là máy ảnh không được trình bày một cách bình thường, hãy sửa tôi nếu tôi sai. Đây là ảnh chụp màn hình https://www.dropbox.com/s/7vyixgo6f0pg64f/CF-iPhone6.PNG?dl=0 –

+0

Rất có thể họ đang sử dụng AVFoundation để chụp ảnh chứ không phải UIImagePickerController. Thư viện AV Foundation cung cấp một cách mạnh mẽ hơn để chụp ảnh, cho phép bạn đặt chế độ xem máy ảnh bên trong ứng dụng của riêng bạn. Bạn có thể tìm thấy hướng dẫn hay tại đây: http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/ – Istvan

Các vấn đề liên quan