gpt4 book ai didi

ios - 制作一个将 UIImage 保存到照片库的方法

转载 作者:行者123 更新时间:2023-11-29 02:58:31 25 4
gpt4 key购买 nike

我正在尝试编写一个显示相机源的应用程序,您可以从中获取图像。我已经成功设置了 UIButton 和链接操作方法 (IBAction),但在触发 UI 保存图片时遇到问题。我已将其全部设置完毕,因此当一切正常时,它应该通知用户,但它却崩溃了。任何见解将不胜感激。

- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidBecomeActive)
name:UIApplicationDidBecomeActiveNotification
object:nil];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}


-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationDidBecomeActiveNotification
object:nil];
}

- (void)applicationDidBecomeActive
{
//Start the camera up

UIImagePickerController *imageViewPickerController = [[UIImagePickerController alloc] init];

//Hide default UI elements

imageViewPickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imageViewPickerController.showsCameraControls = NO;
imageViewPickerController.navigationBarHidden = YES;
imageViewPickerController.toolbarHidden = YES;

//Start the button overlay

UIView *btnView = [[UIView alloc] initWithFrame:imageViewPickerController.view.bounds];
btnView.opaque = NO;
btnView.clipsToBounds = YES;

//Start up the button
UIButton *snapButton = [[UIButton alloc] initWithFrame:CGRectMake(-6, 504, 65, 65)];
snapButton.alpha = 0.5;
snapButton.transform = CGAffineTransformMakeRotation(DEGREES_RADIANS(90));
[snapButton addTarget:snapButton action:@selector(takePhoto:) forControlEvents:UIControlEventTouchUpInside];

//Set the button's picture
UIImage *snapButtonImage = [UIImage imageNamed:@"Button.png"];
[snapButton setImage:snapButtonImage forState:UIControlStateNormal];

//Add button to the overlay
[btnView addSubview:snapButton];

//Overlay button view

imageViewPickerController.cameraOverlayView = btnView;

//Fix for iPhone 5 and make fullscreen

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, -55.0);
CGAffineTransform scale = CGAffineTransformMakeScale(1.333333, 1.333333);
CGAffineTransform rotate = CGAffineTransformMakeRotation(DEGREES_RADIANS(180));
CGAffineTransform transform = CGAffineTransformConcat(translate, scale);
transform = CGAffineTransformConcat(transform, rotate);
imageViewPickerController.cameraViewTransform = transform;

//Let's present it all

[self presentViewController:imageViewPickerController
animated:NO
completion:NULL];


}

- (IBAction)takePhoto:(id)sender {
[UIImagePickerController takePicture];
}

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// Access the uncropped image from info dictionary
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

// Save image
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}


- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
UIAlertView *alert;

// Unable to save the image
if (error)
alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Unable to save image to Photo Album."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
else // All is well
alert = [[UIAlertView alloc] initWithTitle:@"Success"
message:@"Image saved to Photo Album."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}

编辑:修改代码以解决异常。

- (void)applicationDidBecomeActive
{

//Start the camera up

_imageViewPickerController = [[UIImagePickerController alloc] init];

//Hide default UI elements

_imageViewPickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
_imageViewPickerController.showsCameraControls = NO;
_imageViewPickerController.navigationBarHidden = YES;
_imageViewPickerController.toolbarHidden = YES;

//Start the button overlay

UIView *btnView = [[UIView alloc] initWithFrame:_imageViewPickerController.view.bounds];
btnView.opaque = NO;
btnView.clipsToBounds = YES;

//Start up the button
UIButton *snapButton = [[UIButton alloc] initWithFrame:CGRectMake(-6, 504, 65, 65)];
snapButton.alpha = 0.5;
snapButton.transform = CGAffineTransformMakeRotation(DEGREES_RADIANS(90));
[snapButton addTarget:snapButton action:@selector(snapThat) forControlEvents:UIControlEventTouchUpInside];

//Set the button's picture
UIImage *snapButtonImage = [UIImage imageNamed:@"Button.png"];
[snapButton setImage:snapButtonImage forState:UIControlStateNormal];

//Add button to the overlay
[btnView addSubview:snapButton];

//Overlay button view

_imageViewPickerController.cameraOverlayView = btnView;

//Fix for iPhone 5 and make fullscreen

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, -55.0);
CGAffineTransform scale = CGAffineTransformMakeScale(1.333333, 1.333333);
CGAffineTransform rotate = CGAffineTransformMakeRotation(DEGREES_RADIANS(180));
CGAffineTransform transform = CGAffineTransformConcat(translate, scale);
transform = CGAffineTransformConcat(transform, rotate);
_imageViewPickerController.cameraViewTransform = transform;

//Let's present it all

[self presentViewController:_imageViewPickerController
animated:NO
completion:NULL];
}

- (void)snapThat {
[_imageViewPickerController takePicture];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// Access the uncropped image from info dictionary
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

// Save image
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}


- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
{
UIAlertView *alert;

// Unable to save the image
if (error)
alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Unable to save image to Photo Album."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
else // All is well
alert = [[UIAlertView alloc] initWithTitle:@"Success"
message:@"Image saved to Photo Album."
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}

编辑 2:包括标题

@interface TurnikitViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate>

@property (strong, nonatomic) IBOutlet UIView *imageView;

@property (strong, nonatomic) UIImagePickerController *imageViewPickerController;

@end

最佳答案

您应该将其作为属性:

@property (strong, nonatomic) UIImagePickerController *imageViewPickerController;

然后你就可以像你正在做的那样初始化它:

_imageViewPickerController = [[UIImagePickerController alloc] init];

当您保存时:

[_imageViewPickerController takePicture];

现在,您不是在实例上调用该方法,而是在类上调用该方法..这是一个错误:

[UIImagePickerController takePicture];

而且,您要添加按钮本身作为目标..而不是目标是self:

[snapButton addTarget:self action:@selector(snapThat) forControlEvents:UIControlEventTouchUpInside];

关于ios - 制作一个将 UIImage 保存到照片库的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574611/

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