2016-05-14 20 views
5

Ho del codice che funziona su una delle mie app; quindi ho copiato il codice, apportando le modifiche necessarie (es. nomi di campi di testo, ecc.) e funziona tranne quando lo sposto su UIImageView; non appare nulla. Questo è il mio codice:AGGIORNATO: L'immagine viene catturata ma non verrà visualizzata

viewController.h (solo quota di competenza dimostrato per brevità)

#import "AppDelegate.h" 
#import "Books.h" 
#import <AVFoundation/AVFoundation.h> 
#import "MBProgressHUD.h" 
#import <MobileCoreServices/MobileCoreServices.h> 
#import <UIKit/UIKit.h> 

@class Books; 

@interface DetailViewController : UIViewController <UITextFieldDelegate, 
    UIPopoverControllerDelegate, 
    UIPickerViewDataSource, 
    UIPickerViewDelegate, 
    UIActionSheetDelegate, 
    UIScrollViewDelegate, 
    UIImagePickerControllerDelegate, 
    AVCaptureMetadataOutputObjectsDelegate> { 
} 

// UIView 
@property (strong, nonatomic) IBOutlet UIView *bookDetailView; 

// camera stuff 
@property (strong, nonatomic) IBOutlet UIImageView *oBookImage; 
- (IBAction)bOpenCamera:(UIButton *)sender; 

Questo è un codice viewController.m rilevante:

#pragma mark - Camera stuff 
- (IBAction)bOpenCamera:(UIButton *)sender { 

if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { 

    UIImagePickerController *imagePicker = [UIImagePickerController new]; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    imagePicker.mediaTypes = [NSArray arrayWithObjects: (NSString *) kUTTypeImage, nil]; 
    imagePicker.allowsEditing = YES; // MUST HAVE! 

    [imagePicker setDelegate: (id)self]; 
    [self presentViewController:imagePicker animated:YES completion:nil]; 
} 

} 

-(void)image:(UIImage *)image finishedSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { 

if (error) { 
    CommonMethods *cm = [CommonMethods new]; 
    [cm displayAlert:@"Warning!" andData:@"Failed to save book image..." andTag:0 andViewController:self]; 
} 
} 


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

self.oBookImage.contentMode = UIViewContentModeScaleAspectFill; 

NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 
[self dismissViewControllerAnimated:NO completion:nil]; 

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { // (abstract image data) 

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

    // resize it... 
    CGRect screenRect = CGRectMake(0, 0, 114.0, 128.0); // was 90.0, 120.0 
    UIGraphicsBeginImageContext(screenRect.size); 
    [image drawInRect:screenRect blendMode:kCGBlendModePlusDarker alpha:1]; 

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    oBookImage.image = newImage; // show it... 

} 
} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 

[self dismissViewControllerAnimated:NO completion:nil]; 
} 

UPDATE: ad un certo punto, mentre catturando l'immagine, ricevo questo avviso:

Snapshotting a view that ha s non è stato reso risultati in un'istantanea vuota. Assicurati che la tua vista sia stata renderizzata almeno una volta prima dell'istantanea o dello snapshot dopo gli aggiornamenti dello schermo.

Forse questo ha qualcosa a che fare con esso? Ho provato a correggere l'avviso, inutilmente.

Ho cercato problemi simili all'interno di Google e SO, ma non ho trovato nulla. Ci sto lavorando da due giorni e ho deciso che è ora di chiedere aiuto. Grazie in anticipo.

SD

+0

non dovrebbe oBookImage.image = newImage; essere self.oBookImage.image = newImage; – Ro4ch

+0

@ Ro4ch scusami, non ha aiutato ... Non ho questo modo nell'app di lavoro ... grazie comunque ... – SpokaneDude

+1

Scusa, qual è il problema hai ottenuto? – Tien

risposta

1

Funziona per me. Forse elimina il riferimento di oBookImage al tuo viewcontroller dallo storyboard, quindi re-associalo di nuovo.

+1

Questo non ha fatto nulla ... quindi ho stabilito un premio ... grazie comunque! – SpokaneDude

2

provare questo codice

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

self.oBookImage.contentMode = UIViewContentModeScaleAspectFill; 

NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 

    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { // (abstract image data) 

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

    oBookImage.image = [self resizeImage:image]; // show it... 

    } 

[self dismissViewControllerAnimated:NO completion:nil]; 

} 

-(UIImage *)resizeImage:(UIImage *)image 
{ 
     CGFloat compression = 0.9f; 
     CGFloat maxCompression = 0.1f; 
     int maxFileSize = 250*1024; // 250 KB 

     while ([imageData length] > maxFileSize && compression > maxCompression) 
     { 
      compression -= 0.1; 
      imageData = UIImageJPEGRepresentation(image, compression); 
     } 
     UIImage *img=[UIImage imageWithData:imageData]; 
     return img; 
} 
+0

Non ha fatto alcuna differenza; grazie comunque! SD – SpokaneDude

+0

il metodo di ridimensionamento non funziona in quel modo, si prega di mostrare il mio codice modificato –

+0

Il metodo * resizeImage * ha 2 errori principali: 1) l'immagine non ha un selettore di lunghezza, e 2) * image * ha tipi di puntatore incompatibili. Si prega di fare un controllo di sintassi (compilazione) prima di inviare il codice come parte della risposta. SD – SpokaneDude