2013-06-21 4 views
8

Ich habe Knopf, wenn ich zeigt die Kamera klicken (funktioniert perfekt)Mit UIImagePickerController in UIView

- (IBAction)getPhoto:(id)sender 
{ 
    NSLog(@"Button clicked!"); 
    imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera]; 
    } 

    else { // IF the device doesn't have a camera, so use the photos album 
     [imagePicker setSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum]; 
    } 

    [self addSubview:imagePicker.view]; 
} 

Nach dem ich ein Bild nehmen, etc, - Aber wenn ich „Verwendung“ klicken: nichts geschieht hier ist meine Methode: Die Bildauswahl wird nicht ignoriert: Die Anwendung tut einfach nichts, ich versuche das Bild, das ich gerade aufgenommen habe, in einem CGRect auf dem Bildschirm darzustellen.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [picker dismissViewControllerAnimated:YES completion:NULL]; 

    UIImageView *patientImage = [[UIImageView alloc] init]; 
    patientImage.frame = CGRectMake(625, 25, 83, 103); 

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 
    self.patientImage.image = chosenImage; 
} 

Auch wenn ich die Taste abbrechen treffen, ohne ein Bild zu nehmen, die imagePicker (Kamera-Schnittstelle) entlässt nicht selbst

Jede Hilfe, Rat oder Anleitung wäre sehr geschätzt.

+0

patientImage.frame = CGRectMake (625, 25, 83, 103); Hier ist x ist aus Gerät Bildschirm :(so können Sie nicht sehen, Bild und auch [Picker entlassenViewControllerAnimated: YES Abschluss: NULL]; am Ende der Methode –

+0

danke Nitin, aber ich benutze ein iPad, so ist es in Mein Bildschirm, und ich habe versucht, die ablehnenVieController, ohne Erfolg –

+0

ist PatientImage zu jeder Ansicht hinzugefügt? wie [Self AddSubview: PatientImage]; –

Antwort

4

Ist die getPhoto: Methode in der UIView Unterklasse?

Wenn das der Fall ist, dann wäre es besser sein:

  1. Bewegen Sie den getPhoto: Code aus dem UIView Unterklasse vollständig, und es in der Eltern-View-Controller Ansicht setzen.

  2. Machen Sie Ihre UIButton eine Eigenschaft Ihres UIView: @property (nonatomic, strong) UIButton *myButton;

  3. In Ihrem View-Controller, stellen Sie die Ziel & Aktion der Schaltfläche wie folgt:

    [myView.myButton addTarget:self action:@selector(getPhoto:) forControlEvents:UIControlEventTouchUpInside]; 
    
  4. schließlich in Ihrem getPhoto: Methode, Call [self presentViewController:imagePicker animated:YES completion:NULL];

  5. Ihr - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info Code sollte als gehen o im View-Controller, Ändern self.patientImage.image = chosenImage; zu myView.patientImage.image = chosenImage;

+0

Wenn ich platziere Zeile 3 in der viewdidload-Methode der ViewController-Klasse Ich erhalte die Fehlermeldung "PicBtn nicht gefunden am Objekt vom Typ myView" - aber ich habe PicBtn als UIButton deklariert und als eine Eigenschaft in der Kopfzeile meiner UIView-Klasse "myView" –

+0

Für diejenigen auch interessiert seine Frage Was @vinnyCoyne sagte, war das Richtige zu tun. . . . Statt 'myView.myButton' aufzurufen, müssen Sie zunächst eine Instanz der myView-Klasse erstellen und diese dann mit dem Namen der Instanzvariablen aufrufen. Das löste mein Problem. . Vielen Dank –

5

You shouldn't be doing the "addSubview" thing up there sondern tun:

[self presentViewController:imagePicker animated:YES completion:nil]; 
+1

Das Problem ist PresentViewController ist eine Methode von UIViewController, ich brauche diese Anwendung zu arbeiten in UIView, jede Idee? –

+1

Eine Ansicht sollte nicht verantwortlich für die Präsentation eines anderen Controllers. Dies ist gegen MVC, die im Kern von iOS ist. Sie sollten einen View-Controller dies tun, wie in dieser Antwort vorgeschlagen. –

-1

die [self.addSubView:imagePicker.view]; entfernen und stattdessen

[self presentViewController:imagePicker animated:YES completion:NULL];

Sie sind entlassen die Variable picker obwohl picker nicht definiert ist. Stattdessen setzen:

[self dismissModalViewControllerAnimated:YES completion:NULL]; und stellen Sie sicher, dass es am Ende Ihrer Methode ist.

1

weiß nicht, warum die Löschtaste nicht funktioniert. Wenn Sie diese Änderung vornehmen, wird das Bild ausgewählt, auf das Sie klicken.

Wenn Sie ein Ereignis abbrechen möchten, fügen Sie es hinzu, indem Sie UIBarButton erstellen und hinzufügen.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

UIImageView *patientImage = [[UIImageView alloc] init]; 
patientImage.frame = CGRectMake(625, 25, 83, 103); 

UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 
self.patientImage.image = chosenImage; 

[imagePicker.view removeFromSuperview]; 

} 
1

Versuchen:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    [picker.view removeFromSuperview]; 

    UIImageView *patientImage = [[UIImageView alloc] init]; 
    patientImage.frame = CGRectMake(625, 25, 83, 103); 

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 
    self.patientImage.image = chosenImage; 
} 
5

Statt den Picker als Subview hinzufügen, sollten Sie den Picker zu einem UIPopoverController hinzuzufügen.

Sie können es dann aus Ihrer UIView Unterklasse anzeigen, indem Sie mit der presentPopoverFromRect:inView:permittedArrowDirections:animated: popover Methode wie folgt:

self.popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
[self.popover presentPopoverFromRect:sender.frame inView:self permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES]; 

Dann können Sie die Delegatmethoden verwenden, um die popover zu entlassen werden:

[self.popover dismissPopoverAnimatedYES]; 

Das wird durch die official docs erforderlich:

Die Tabelle zeigt an, dass auf dem iPad, wenn Sie eine Quelltyp UIImagePickerControllerSourceTypePhotoLibrary angeben oder UIImagePickerControllerSourceTypeSavedPhotosAlbum, Sie Die Bildauswahl unter Verwendung eines popover Controller präsentieren müssen, wie in beschrieben „Presenting und die Popover Dismissing“ in UIPopoverController Klasse Referenz. Wenn Sie versuchen, einen Bild-Picker modal (Vollbild) für die Auswahl zwischen gespeicherten Bildern und Filmen zu präsentieren, löst das System eine Ausnahme aus.

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