【问题标题】:How to save UIImageView after UIGestureRecognizer have passed?UIGestureRecognizer 通过后如何保存 UIImageView?
【发布时间】:2012-11-02 16:28:02
【问题描述】:

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

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

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

这是我的保存方法: 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;
}

【问题讨论】:

    标签: ios xcode uiimage save


    【解决方案1】:

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

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

    【讨论】:

    • Hukir,谢谢你的回答,但我不明白第一部分,我为什么要这样做?我想我已经准备好在旋转、缩放等功能中执行此操作了。猜猜我是否将手指放在frontImg 上,它会移动或旋转和缩放,所以它已经画好了??如果我错了,请纠正我!
    • 在以下代码中: 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];您正在创建一个矩形 (0, 0, backgroundWidth, backgroundHeight)。然后你在那个矩形中绘制frontImg。它不带原点、大小和旋转。
    • UIImage drawInRect: 的文档说:“在指定的矩形中绘制整个图像,并根据需要对其进行缩放以适合。”这意味着它正在缩放图像以适合提供的矩形。它没有采用 UIImageView 绘图参数。
    • Hukir 我整个周末都在努力让它工作,但我似乎无法找到它。如何使用通过手势应用的调整比例、旋转等保存 frontImg?
    • 最好的办法是确保 backgroundImg 和 frontImg 都在 UIView 中。然后使用我给你的教程截取该视图的屏幕截图。然后,您将轻松完成所有缩放和旋转。
    猜你喜欢
    • 2011-04-23
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多