2016-05-14 2 views
5

У меня есть код, который работает над одним из моих приложений; поэтому я скопировал код, внеся необходимые изменения (например, имена текстового поля и т. д.), и он работает, за исключением случаев, когда я перехожу к UIImageView; ничего не появляется. Это мой код:ОБНОВЛЕНО: изображение снято, но не отображено

viewController.h (релевантно только часть, показанная для краткости)

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

Это относится код viewController.m:

#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: в какой-то момент время захватив изображение, я получаю это предупреждение:

Снимок с изображением, что ha s не были получены результаты в пустой снимок. Убедитесь, что ваше представление было просмотрено как минимум один раз перед моментальным снимком или снимком после обновлений экрана.

Возможно, это как-то связано с этим? Я попытался исправить предупреждение, но безрезультатно.

Я искал похожие проблемы в Google и SO, но ничего не нашел. Я работаю над этим уже два дня и решил, что пришло время обратиться за помощью. Заранее спасибо.

SD

+0

не должен oBookImage.image = newImage; быть self.oBookImage.image = newImage; – Ro4ch

+0

@ Ro4ch извините, не помогло ... У меня этого нет в рабочем приложении ... спасибо в любом случае ... – SpokaneDude

+1

Прошу прощения, в чем проблема? – Tien

ответ

2

я тоже получаю этот вопрос. После нескольких часов исследований я столкнулся с этим: iOS8 Snapshotting a view that has not been rendered results in an empty snapshot

Возможно, последний ответ может вам помочь? Я надеюсь, что это так. Если нет, это может быть ошибкой.

+0

Я также считаю, что это ошибка, но я собираюсь попробовать Apple Tech Support и посмотреть, что они говорят. Спасибо всем за ваши предложения. SD – SpokaneDude

1

Это работает для меня. Возможно, удалите ссылку oBookImage на свой диспетчер представлений из раскадровки, а затем снова привяжите его.

+1

Это не делало ничего ... поэтому я поставил щедрость ... спасибо в любом случае! – SpokaneDude

2

попробовать этот код

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

Не имеет значения; Спасибо, в любом случае! SD – SpokaneDude

+0

ваш метод изменения размера не работает так, пожалуйста, покажите мой отредактированный код –

+0

Ваш метод * resizeImage * имеет две основные ошибки: 1) изображение не имеет селектора длины, а 2) * image * имеет несовместимые типы указателей. Просим выполнить проверку синтаксиса (сборка) перед отправкой кода как часть вашего ответа. SD – SpokaneDude

Смежные вопросы