xcode 将 UIImageView 中的图像保存到 iPad 照片库
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4198083/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Save image in UIImageView to iPad Photos Library
提问by Brian
I am creating an iPad app that has several pictures (UIImageViews
) in a horizontal scrollview. I want to allow the user to be able to save the images to their Photo Library when they tap on one of the UIImageView
s. I like the way Safari handles this matter: you just tap and hold until a pop up menu appears and then click save image. I know there is the "UIImageWriteToSavedPhotosAlbum
". But I am a newbie to iOS development and I'm not too sure where to go with it and where to put it (i.e. how to detect which image was tapped).
我正在创建一个 iPad 应用程序,它UIImageViews
在水平滚动视图中包含多张图片 ( )。我想让用户在点击其中一个时能够将图像保存到他们的照片库中UIImageView
。我喜欢 Safari 处理这个问题的方式:您只需点击并按住直到出现弹出菜单,然后单击保存图像。我知道有“ UIImageWriteToSavedPhotosAlbum
”。但我是 iOS 开发的新手,我不太确定将它放在哪里以及放在哪里(即如何检测哪个图像被点击)。
From what I have found, I have seen people use UIImage
instead of UIImageView
. Do I need to convert my view to UIImage
? If so, how? How do I detect when the user taps the images, and which UIImageView
was tapped? If you could point me in the right direction, and maybe some examples I would greatly appreciate it.
从我发现,我已经看到了人们使用UIImage
代替UIImageView
。我需要将我的视图转换为UIImage
吗?如果是这样,如何?如何检测用户何时点击图像以及点击了哪些图像UIImageView
?如果你能指出我正确的方向,也许还有一些例子,我将不胜感激。
回答by bosmacs
You can use the image
property of a UIImageView
to get the current image:
您可以使用 a 的image
属性UIImageView
来获取当前图像:
UIImage* imageToSave = [imageView image]; // alternatively, imageView.image
// Save it to the camera roll / saved photo album
UIImageWriteToSavedPhotosAlbum(imageToSave, nil, nil, nil);
回答by raj
- (IBAction)TakePicture:(id)sender {
// Create image picker controller
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
// Set source to the camera
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
// Delegate is self
imagePicker.delegate = self;
OverlayView *overlay = [[OverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)];
// imagePicker.cameraViewTransform = CGAffineTransformScale(imagePicker.cameraViewTransform, CAMERA_TRANSFORM_X, CAMERA_TRANSFORM_Y);
// Insert the overlay:
imagePicker.cameraOverlayView = overlay;
// Allow editing of image ?
imagePicker.allowsImageEditing = YES;
[imagePicker setCameraDevice:
UIImagePickerControllerCameraDeviceFront];
[imagePicker setAllowsEditing:YES];
imagePicker.showsCameraControls=YES;
imagePicker.navigationBarHidden=YES;
imagePicker.toolbarHidden=YES;
imagePicker.wantsFullScreenLayout=YES;
self.library = [[ALAssetsLibrary alloc] init];
// Show image picker
[self presentModalViewController:imagePicker animated:YES];
}
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// Access the uncropped image from info dictionary
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
// Save image to album
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
// save image to custom album
[self.library saveImage:image toAlbum:@"custom name" withCompletionBlock:^(NSError *error) {
if (error!=nil) {
NSLog(@"Big error: %@", [error description]);
}
}];
[picker dismissModalViewControllerAnimated:NO];
}
- (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) alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex
{
// After saving iamge, dismiss camera
[self dismissModalViewControllerAnimated:YES];
}
回答by user867380
In regards to the part of your question asking how to detect which UIImageView was tapped, you can use code like the following:
关于您的问题中询问如何检测哪个 UIImageView 被点击的部分,您可以使用如下代码:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesEnded:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint touchEndpoint = [touch locationInView:self.view];
CGPoint imageEndpoint = [touch locationInView:imageview];
if(CGRectContainsPoint([imageview frame], touchEndpoint))
{
do here any thing after touch the event.
}
}
回答by King-Wizard
In Swift:
在斯威夫特:
// Save it to the camera roll / saved photo album
// UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, nil, nil, nil) or
UIImageWriteToSavedPhotosAlbum(self.myUIImageView.image, self, "image:didFinishSavingWithError:contextInfo:", nil)
func image(image: UIImage!, didFinishSavingWithError error: NSError!, contextInfo: AnyObject!) {
if (error != nil) {
// Something wrong happened.
} else {
// Everything is alright.
}
}