2015-10-06 4 views
5

ich auf eine Kamera-App arbeite, wo soll ich eine Kamera in enter image description hereRahmen cameraViewTransform dynamisch für iOS 8

zeigen, dass ich camView.cameraViewTransform = CGAffineTransformMakeScale(1.0, 1.0) ; verwende aber unterschiedliche Ergebnisse für verschiedene Geräte und einem schwarzen Balken zwischen Tab-Leiste immer und Kamera. Wenn ich den Wert von scaling ändere, wird die Kamera zu stark vergrößert. Jede Hilfe in dieser Angelegenheit würde sehr geschätzt werden.

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

Könnten Sie etwas Code posten, wie richten Sie die CamView-Ansicht ein? – Istvan

+0

@Istvan danke für das Nachschlagen, ich habe den Quellcode aktualisiert. –

Antwort

1

Die Frage ist, was Sie in einem Ergebnis haben möchten. CGAffineTransformMakeScale (1.0,1.0) ist die Standardskalierung - also werden keine Änderungen vorgenommen. Die Kamera auf allen Apple Geräten hat ein Seitenverhältnis von 4: 3. Außerdem muss ich zugeben, dass die Standard-Kameraansicht eine Größe hat, die der Bildschirmbreite gleich ist, die die Werbung 4: 3 führt - deshalb haben Sie immer eine andere Kameraansicht.

Wenn Sie eine Kameraansicht mit einer Höhe haben möchten, die der Bildschirmhöhe entspricht, müssen Sie eine affine Transformation durchführen. Hier ist ein Beispiel:

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

Aber auf diese Weise, wie Sie gesehen haben Kameraansicht wird "gezoomt". Hoffe, dies wird Ihnen helfen, das Problem zu verstehen, das Sie haben.

+0

Vielen Dank, aber Ihr Code ist in Folgen für iPhone 6 https://www.dropbox.com/s/y8pgu07v97qm3mg/iPhone-6.png?dl=0 und iPhone 6 Plus https://www.dropbox.com/ s/ajy6vodoryccd7r/iPhone-6Plus.png?dl = 0 es funktioniert gut für iPhone 5 –

+0

@DepeshGairola Entfernen Sie einfach "-20" und es wird für iPhone6 ​​und 6+ in Ordnung sein. Ich habe das getan, weil ich keine Statusleiste auf meinem Controller habe, wo ich das verwende. – Seliver

+0

@DepeshGairola Ich meine für iPhone 6 und 6+ benutze CGFloat cameraAdjustedYPosition = (screenSize.height - cameraViewStarterHeight)/2 – Seliver

3

Was Sie versuchen zu erreichen, wird offiziell von Apple nicht unterstützt. Von der UIImagePickerController Class Reference:

Um ein Bild Picker-Controller enthält die Standardsteuerungen zu verwenden, führen Sie diese Schritte aus:

...

  1. Präsens der Benutzeroberfläche . Führen Sie auf dem iPhone oder iPod touch modal (Vollbild) durch, indem Sie die Methode presentViewController:animated:completion: des derzeit aktiven View-Controllers aufrufen und Ihren konfigurierten Image-Picker-Controller als neuen View-Controller übergeben.

    auf iPad, wenn Sie eine Quelltyp UIImagePickerControllerSourceTypeCamera angeben, können Sie das Bild Picker präsentieren modal (Vollbild) oder durch einen popover verwenden. Allerdings empfiehlt Apple, dass Sie präsentieren die Kamera-Schnittstelle nur Vollbild.

Was Sie tun können, ist den UIImagePickerController modal (Vollbild) und fügen Sie benutzerdefinierte Steuerelemente mit der cameraOverlayView Eigenschaft zu präsentieren.

Lösung

Um das zu erreichen, was Sie wollen Sie AVFoundation und nicht UIImagePickerController zu verwenden. AV Foundation-Bibliothek bietet eine viel leistungsfähigere Art der Aufnahme von Fotos, mit denen Sie die Kameraansicht in Ihre eigene App legen können. Sie können ein gutes Tutorial finden , oder ein neueres here

+0

Danke, dass du dir die Zeit genommen hast, in die Sache zu schauen. Wenn das, was Sie sagen, wahr ist, wie kommt es dann, dass die CamFind-Anwendung UIImagePickerController in der seitlichen Tab-Leiste implementiert hat? Hier ist der Screenshot der App und von dem, was ich durch das Ausführen ihrer App verstehen kann, ist die Kamera nicht modal dargestellt, bitte korrigiere mich wenn ich falsch liege. Hier ist der Screenshot https://www.dropbox.com/s/7vyixgo6f0pg64f/CF-iPhone6.PNG?dl=0 –

+0

Höchstwahrscheinlich verwenden sie AVFoundation, um Bilder und nicht UIImagePickerController zu machen. AV Foundation-Bibliothek bietet eine viel leistungsfähigere Art der Aufnahme von Fotos, mit denen Sie die Kameraansicht in Ihre eigene App legen können. Sie können ein gutes Tutorial hier finden: http://red-glasses.com/index.php/tutorials/ios4-take-photos-with-live-video-preview-using-avfoundation/ – Istvan