简体   繁体   English

drawInRect不读取/保留UIImageView转换

[英]drawInRect does not read / preserve UIImageView transform

I encountered a problem when I pinch, pan or rotate a UIImageview in drawInRect, the transform is not being preserved. 当我在drawInRect中捏,平移或旋转UIImageview时遇到问题,未保存转换。

How can I preserve the transform in drawInRect? 如何在drawInRect中保留转换?

I tried this but no go :( 我尝试了这个但是没有去:(

- (UIImage*) combineImage:(UIImageView *)selectedImage withOverlay:(UIImageView *)overlayImage
{
    /* Identify the region that needs to be cropped */
    CGRect viewForImgFrame = self.viewForImg.frame;
    NSLog(@"view %@", NSStringFromCGRect(viewForImgFrame));
    NSLog(@"selectedImage Img value %@",selectedImage);
    NSLog(@"overlayImage Img value %@",overlayImage);
    CGSize newImageSize =self.viewForImg.frame.size;
    NSLog(@"CGSize %@",NSStringFromCGSize(newImageSize));
    UIGraphicsBeginImageContextWithOptions(newImageSize, NO, 0.0); //retina res

   //[self.viewForImg.layer renderInContext:UIGraphicsGetCurrentContext()];

    [selectedImage.image drawInRect:CGRectMake(0, 0, selectedImage.frame.size.width, selectedImage.frame.size.height)];

    CGContextConcatCTM(UIGraphicsGetCurrentContext(), overlayImage.transform);

    [overlayImage.image drawInRect:CGRectMake(overlayImage.frame.origin.x, overlayImage.frame.origin.y, overlayImage.frame.size.width, overlayImage.frame.size.height)];


    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    NSData *imgData =  UIImageJPEGRepresentation(image, 0.9); //UIImagePNGRepresentation ( image ); // get JPEG representation
    UIImage * imagePNG = [UIImage imageWithData:imgData]; // wrap UIImage around PNG representation
    UIGraphicsEndImageContext();
    return imagePNG;
}

Any comments are greatly appreciated. 任何意见,不胜感激。

you need to try 你需要尝试

CGRectApplyAffineTransform(<#CGRect rect#>, <#CGAffineTransform t#>)

your code should be like 您的代码应该像

CGContextConcatCTM(UIGraphicsGetCurrentContext(), overlayImage.transform);
CGRect rect = CGRectMake(overlayImage.frame.origin.x, overlayImage.frame.origin.y, overlayImage.frame.size.width, overlayImage.frame.size.height);
CGRect transformedRect = CGRectApplyAffineTransform(rect, overlayImage.transform);
[overlayImage.image drawInRect:transformedRect];

原来,AutoresizingMask更改了rect大小

 [slider setAutoresizingMask:UIViewAutoresizingNone];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM