UIGestureRecognizer 通过后如何保存 UIImageView? [英] How to save UIImageView after UIGestureRecognizer have passed?

查看:37
本文介绍了UIGestureRecognizer 通过后如何保存 UIImageView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有 2 个 UIImageView 的应用程序,它们相互重叠.我有 backgroundImg 和 FrontImg.frontImg 可以在哪里:通过 UIGestureRecognizers 旋转、移动、缩放.

I have a app with 2 UIImageView that are Layed over each other. I have backgroundImg and FrontImg. Where frontImg can be: rotated, moved, scaled via the UIGestureRecognizers.

当我想保存我的 UIImages 时,我会合并它们,但它们会被保存,就好像它们从未被触摸过一样.

When I want to save my UIImages's I merge them, but they are saved as if they were never touched.

有人知道如何解决这个问题吗?

Does anyone knows how to fix this?

这是我的保存方法:UIGraphicsBeginImageContext(self.backgroundImg.image.size);

This is my saving method: UIGraphicsBeginImageContext(self.backgroundImg.image.size);

    CGRect rect = CGRectMake(0, 0, self.backgroundImg.image.size.width, self.backgroundImg.image.size.height);
    self.frontImg.contentMode = UIViewContentModeScaleAspectFit;
    [self.backgroundImg.image drawInRect:rect];
    [self.frontImg.image drawInRect:rect];

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

    //[imageView3 setImage:resultingImage];

    UIGraphicsBeginImageContextWithOptions(self.backgroundImg.bounds.size, NO,0.0);
    [self.backgroundImg.image drawInRect:CGRectMake(0, 0, self.backgroundImg.frame.size.width, self.backgroundImg.frame.size.height)];
    //UIImage *SaveImage = UIGraphicsGetImageFromCurrentImageContext();
    //UIImage *resultingImage = [self mergeImage:self.backgroundImg.image withImage:self.frontImg.image];
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(resultingImage, self,@selector(image:didFinishSavingWithError:contextInfo:), nil);

这些是我的手势功能:

-(IBAction)handlePan:(UIPanGestureRecognizer *)recognizer{
    CGPoint translation = [recognizer translationInView:self.view];
    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
                                         recognizer.view.center.y + translation.y);
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}

-(IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer
{
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale =1;
}

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return ![gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}

-(IBAction)handleRotate:(UIRotationGestureRecognizer *)recognizer
{
    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    self.frontImg.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation = 0;
}

推荐答案

您的正面图像没有按照视图中的坐标、比例等进行绘制.您正在使用与背景相同的矩形(0、0、backgroundWidth、backgroundHeight)绘制它.您需要确保在将其绘制到图形上下文时获得正确的位置、大小和比例.

Your front image isn't being drawn at the coordinates, scale, etc it has in the view. You are drawing it with the same rect as the background (0, 0, backgroundWidth, backgroundHeight). You need to make sure that when you draw it to the graphics context you're getting the proper location, size, and scale.

如果两个图像都包含在同一个视图中,您可以只截取该视图.这篇文章应该可以帮助你:http://ios-dev-blog.com/how-to-create-uiimage-from-uiview/

If both of the images are contained within the same view, you can just screenshot that view. This post should help you out: http://ios-dev-blog.com/how-to-create-uiimage-from-uiview/

这篇关于UIGestureRecognizer 通过后如何保存 UIImageView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆