2015-10-06 29 views
5

我工作的一個攝像頭應用,在那裏我應該表現出內enter image description here設置cameraViewTransform動態地爲iOS 8

相機我使用camView.cameraViewTransform = CGAffineTransformMakeScale(1.0, 1.0) ;,但得到了不同的設備和標籤欄之間的黑條不同的結果相機。如果我更改scaling的值,則相機太放大。在這個問題上的任何幫助將不勝感激。

- (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

你可以發佈一些代碼如何設置camView視圖? – Istvan

+0

@Istvan感謝您的查詢,我更新了源代碼。 –

回答

1

問題是你想要的結果。 CGAffineTransformMakeScale(1.0,1.0)是默認比例 - 所以這不作任何改變。 所有蘋果設備上的相機的長寬比爲4:3。此外,我必須承認,默認相機視圖的尺寸與屏幕寬度相同,因此導致升級4:3 - 這就是爲什麼您總是有不同的相機視圖。

如果你想讓攝像機視圖的高度與屏幕高度相等,你需要進行仿射變換。這裏是一個例子:

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

但是就這樣,正如你所看到的相機視圖將被「縮放」。 希望這會幫助你理解你的問題。

+0

謝謝,但您的代碼導致以下iPhone 6 https://www.dropbox.com/s/y8pgu07v97qm3mg/iPhone-6.png?dl=0和iPhone 6 Plus https://www.dropbox.com/ S/ajy6vodoryccd7r/iPhone,6Plus.png?dl = 0其工作正常的iPhone 5 –

+0

@DeepeshGairola只需刪除「-20」,它將適用於iPhone6和6+。我這樣做是因爲我的控制器上沒有狀態欄,我使用它。 – Seliver

+0

@DeepeshGairola我的意思是iPhone 6和6+使用CGFloat cameraAdjustedYPosition =(screenSize.height - cameraViewStarterHeight)/ 2 – Seliver

3

您嘗試存檔的內容不受Apple正式支持。從UIImagePickerController Class Reference

要使用的圖像選擇器控制器包含其默認控件,執行以下步驟:

...

  • 呈現用戶界面。 在iPhone或iPod touch上,通過調用當前活動視圖控制器的presentViewController:animated:completion:方法,以模式(全屏)方式執行此操作,並將已配置的圖像選取器控制器作爲新視圖控制器傳遞。

    在iPad上,如果您指定源類型的UIImagePickerControllerSourceTypeCamera,則可以以圖形選擇器的模式顯示(全屏)或使用彈出窗口。不過,蘋果建議你目前的相機接口只有全屏

  • 你可以做的是模態(全屏幕)呈現的UIImagePickerController,並添加自定義控件與cameraOverlayView財產。

    解決方案

    達到你想要什麼,你必須使用AVFoundation,而不是的UIImagePickerController。 AV Foundation圖書館提供了更加強大的照片拍攝方式,可讓您將相機視圖放入自己的應用程序中。你可以找到一個很好的教程here,或更新的here

    +0

    感謝您花時間研究此事。如果你所說的是真的,那麼CamFind應用程序如何在側面標籤欄中實現UIImagePickerController。這裏是應用程序的屏幕截圖,從我能夠通過運行他們的應用程序可以理解的是相機沒有以模態方式呈現,如果我錯了,請糾正我。這裏是屏幕截圖https://www.dropbox.com/s/7vyixgo6f0pg64f/CF-iPhone6.PNG?dl=0 –

    +0

    最有可能的是他們使用AVFoundation拍照而不是UIImagePickerController。 AV Foundation圖書館提供了更加強大的照片拍攝方式,可讓您將相機視圖放入自己的應用程序中。你可以在這裏找到一個很好的教程:http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/ – Istvan