gpt4 book ai didi

ios - 在另一个 View Controller 中传递 ImagePickerView 的图像

转载 作者:行者123 更新时间:2023-11-28 22:20:58 25 4
gpt4 key购买 nike

大家好我正在使用 imagePickerView 的 View Controller

当用户从图库中选择照片时,我希望所选照片将显示在另一个 View Controller 中。

我目前正在使用 Storyboard,所以我正在使用这种方法:

- (void) imagePickerController : ( UIImagePickerController *) picker didFinishPickingMediaWithInfo : ( NSDictionary *) info {
        
    UIImage * PhotoForEdit = self.FF_image ;
    PhotoForEdit = [info objectForKey : UIImagePickerControllerEditedImage ] ;
    
   FFEditingPhotoPost *VCPhotoEdit = [[FFEditingPhotoPost alloc] initWithImage:PhotoForEdit];
   [self performSegueWithIdentifier:@"immagine"sender:self];  
   [self.navigationController pushViewController:VCPhotoEdit animated:NO];
   [self dismissViewControllerAnimated:YES completion:nil];

}





- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
FFEditingPhotoPost * controller = (FFEditingPhotoPost *)segue.destinationViewController;
controller.FFOriginalImage = FF_image;
}

我的问题是我无法使用在 CONTROLLR 下一个 View 中选择的 Storyboard图像...我哪里做错了?

谢谢大家的建议

编辑:插入应该显示照片的 View Controller

#import "FFEditingPhotoPost.h"
#import "UIImage+Resize.h"

@interface FFEditingPhotoPost ()

@end

@implementation FFEditingPhotoPost
@synthesize FFScrollView;
@synthesize FFImageView;
@synthesize FFOriginalImage;
@synthesize SelectedFoto;
@synthesize SelectedFotoMiniature;



- (id)initWithImage:(UIImage *)image {
self = [super initWithNibName:nil bundle:nil];
if (self) {
if (!image) {
return nil;
}

FFOriginalImage = image;
// self.fileUploadBackgroundTaskId = UIBackgroundTaskInvalid;
// self.photoPostBackgroundTaskId = UIBackgroundTaskInvalid;
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

FFScrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
FFScrollView.delegate = self;
FFScrollView.backgroundColor = [UIColor blackColor];
// self.view = FFScrollView;

FFImageView = [[UIImageView alloc] initWithFrame:CGRectMake(20.0f, 42.0f, 280.0f, 280.0f)];
[FFImageView setBackgroundColor:[UIColor blackColor]];
[FFImageView setImage:FFOriginalImage];
[FFImageView setContentMode:UIViewContentModeScaleAspectFit];
FFImageView.layer.masksToBounds = NO;
FFImageView.layer.shadowRadius = 3.0f;
FFImageView.layer.shadowOffset = CGSizeMake(0.0f, 2.0f);
FFImageView.layer.shadowOpacity = 0.5f;
FFImageView.layer.shouldRasterize = YES;


[FFScrollView setContentSize:CGSizeMake(FFScrollView.bounds.size.width, FFImageView.frame.origin.y + FFImageView.frame.size.height + FFImageView.frame.size.height)];

[self shouldUploadImage:FFOriginalImage];

}
- (BOOL)shouldUploadImage:(UIImage *)anImage {
UIImage *resizedImage = [anImage resizedImageWithContentMode:UIViewContentModeScaleAspectFit bounds:CGSizeMake(560.0f, 560.0f) interpolationQuality:kCGInterpolationHigh];

UIImage *thumbnailImage = [anImage thumbnailImage:86.0f transparentBorder:0.0f cornerRadius:10.0f interpolationQuality:kCGInterpolationDefault];

// JPEG to decrease file size and enable faster uploads & downloads
NSData *imageData = UIImageJPEGRepresentation(resizedImage, 0.8f);
NSData *thumbnailImageData = UIImagePNGRepresentation(thumbnailImage);

if (!imageData || !thumbnailImageData) {
return NO;
}

SelectedFoto = [PFFile fileWithData:imageData];
SelectedFotoMiniature = [PFFile fileWithData:thumbnailImageData];
[SelectedFoto saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded) {
NSLog(@"Photo uploaded successfully");
[SelectedFotoMiniature saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded) {
NSLog(@"Thumbnail uploaded successfully");
}
}];
} else {
}
}];

return YES;
}

最佳答案

我认为 PhotoForEdit = [info objectForKey : UIImagePickerControllerEditedImage ] ;应该是 self.FF_image =

编辑 -----

您的代码有几处错误。首先,您正在创建 FFEditingPhotoPost View Controller 的 2 个副本。谁知道哪一个最终排在首位。

如果您设置了 Storyboard segue,则更改您的图像选择器代码以像这样执行 segue:

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

self.FF_image = [info objectForKey : UIImagePickerControllerEditedImage ] ;

[self performSegueWithIdentifier:@"immagine"sender:self];

}

您的prepareForSegue 代码没问题。请注意,我还切换了设置 self.FF_image 属性的代码,因为这是错误的方法。

现在在您的 FFEditingPhotoPost View Controller 中,您不需要 initWithImage 方法,只需使用 viewWillAppear 方法来设置您的图像。 viewDidLoad 方法在您的 prepareForSegue 之前调用,这意味着 FFOriginalImage 在您尝试使用它时为 nil。

所以像这样使用viewWillAppear:

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[FFImageView setImage:FFOriginalImage];
}

关于ios - 在另一个 View Controller 中传递 ImagePickerView 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com