2010-02-20 12 views

risposta

16

ho fatto una domanda simile here

La mia soluzione era quella di creare una vista personalizzata in cima alla UIImagePickerControllerView default.

Ho scaricato l'esempio Augmented Reality

Quindi è possibile utilizzare l'OverlayView.m e OverlayView.h aggiungendoli al progetto: ho fatto il selettore personalizzato barra degli strumenti, selettore e OverlayView globale in modo che io possa accedere ovunque nel progetto.

Nella tua ViewController.h

@class OverlayView; 

@interface ViewController //bla bla... 
{ 
UIImagePickerController * picker; 
UIToolbar *toolBar; 
OverlayView *overlayView; 
} 

ho creato i controlli della barra degli strumenti un pulsante della fotocamera e il pulsante

// toolbar - handy if you want to be able to exit from the image picker... 
      toolBar=[[[UIToolbar alloc] initWithFrame:CGRectMake(0, 480-55, 320, 55)] autorelease]; 
      toolBar.barStyle = UIBarStyleBlackOpaque; 
      NSArray *items=[NSArray arrayWithObjects: 
          [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelPicture)] autorelease], 
          [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease], 
          [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(shootPicture)] autorelease], 
          [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease], 
          [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease], 
          nil]; 
      [toolBar setItems:items]; 

      // create the overlay view 
      overlayView=[[[OverlayView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-44)] autorelease]; 
      // important - it needs to be transparent so the camera preview shows through! 
      overlayView.opaque=NO; 
      overlayView.backgroundColor=[UIColor clearColor]; 

        // parent view for our overlay 
     UIView *parentView=[[[UIView alloc] initWithFrame:CGRectMake(0,0,320, 480)] autorelease]; 
     [parentView addSubview:overlayView]; 
     [parentView addSubview:toolBar]; 

     // configure the image picker with our overlay view 
     picker=[[UIImagePickerController alloc] init]; 
     picker.sourceType = UIImagePickerControllerSourceTypeCamera; 

     // hide the camera controls 
     picker.showsCameraControls=NO; 
     picker.wantsFullScreenLayout = YES; 

Il annullare metodo

- (IBAction)cancel { 
    // Don't pass current value to the edited object, just pop. 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

L'(shootPictureMethod annullare):

-(void) shootPicture { 

    [picker takePicture]; 

} 

Per uscire senza mostrare anteprima solo respingere la vista dopo aver scattato la foto nel metodo didFinishPickingImage

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo 
{ 
//do whatever 

[self dismissModalViewControllerAnimated:YES]; 
} 
+0

In questo esempio, non è il pulsante che scatta foto piccola? – Chris

+0

.. tu rock !! \ m/ – Zaraki

+0

@erastusnjuki Sto affrontando un problema in caso di iPad. Il problema è che mentre si riposiziona ToolBar da Portrait-to-Landscape e viceversa, l'effetto di riposizionamento della barra degli strumenti è chiaramente visibile (ad esempio, la barra degli strumenti viene spostata da una posizione all'altra in un piccolo intervallo di tempo). Come risolvere questo problema? –

Problemi correlati