Convertir UIScrollViewPoint en UIImage + ZOOM + ROTATION

J'ai besoin de recadrer UIImage qui est chargé dans UIScrollview avec un rect d'un autre UIView qui est aussi dans UIScrollView

Voici la hiérarchie de vue

  --> View --> UIScrollView --> viewBase (UIView) --> UIImageView -> (Zoomed & rotated ) --> UIView (Target View)(Movable User can move anywhere in scrollview to crop rect) 

Mon image est pivotée et agrandie Je dois get une partie exacte de l'image dans TargetView

Je dessine UIImage avec rotation sur le context suivant le code

 CGFloat angleCroppedImageRetreacted = atan2f(self.imgVPhoto.transform.b, self.imgVPhoto.transform.a); angleCroppedImageRetreacted = angleCroppedImageRetreacted * (180 / M_PI); UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.imgVPhoto.image.size.width, self.imgVPhoto.image.size.height)]; rotatedViewBox.transform = CGAffineTransformMakeRotation(-angleCroppedImageRetreacted); CGSize rotatedSize = rotatedViewBox.frame.size; UIGraphicsBeginImageContext(rotatedSize); CGContextRef bitmap = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(bitmap, rotatedSize.width / 2.0f, rotatedSize.height / 2.0f); CGContextRotateCTM(bitmap, -angleCroppedImageRetreacted); CGContextScaleCTM(bitmap, 1.0f, -1.0f); CGContextDrawImage(bitmap, CGRectMake(-self.imgVPhoto.image.size.width / 2.0f, -self.imgVPhoto.image.size.height / 2.0f, self.imgVPhoto.image.size.width, self.imgVPhoto.image.size.height), self.imgVPhoto.image.CGImage); UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

Et ça fonctionne bien. Je suis returnné UIImage même que je peux voir dans le simulateur

Pour convertir le sharepoint vue cible en UIImage j'utilise le code suivant qui ne fonctionne pas

  CGPoint imageViewPoint = [self.viewBase convertPoint:self.targetImageview.center toView:self.imgVPhoto]; float percentX = imageViewPoint.x / self.imgVPhoto.frame.size.width; float percentY = imageViewPoint.y / self.imgVPhoto.frame.size.height; CGPoint imagePoint = CGPointMake(resultImage.size.width * percentX, resultImage.size.height * percentY); rect.origin = imagePoint; //rect.origin.x *= (self.imgVPhoto.image.size.width / self.imgVPhoto.frame.size.width); //rect.origin.y *= (self.imgVPhoto.image.size.height / self.imgVPhoto.frame.size.height); imageRef = CGImageCreateWithImageInRect([resultImage CGImage], rect); img = [UIImage imageWithCGImage:imageRef scale:viewImage.scale orientation:viewImage.imageOrientation]; 

Je pense que le problème est que nous ne pouvons pas utiliser Rect après Transformer Appliquer

S'il vous plaît Aidez-moi à recadrer UIImage qui est UIImage et tourné de rect sur la même hiérarchie

Si vous avez besoin de plus d'informations, requestz SVP

Je réponds à ma propre question.

Merci à Matic pour avoir donné une idée

J'ai changé de logique

J'ai atteint la même fonctionnalité que ce que je cherche

 CGPoint locationInImageView = [self.viewBase convertPoint:self.targetImageview.center toView:self.view]; // received from touch locationInImageView = [self.view convertPoint:locationInImageView toView:self.imgVPhoto]; // I GOT LOCATION IN UIIMAGEVIEW OF TOUCH POINT UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0); [self.imgVPhoto.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *img1 = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // I GOT UIIMAGE FROM CURRENT CONTEXT CGFloat width = self.targetImageview.frame.size.width * self.zoomScale ; CGFloat height = self.targetImageview.frame.size.height * self.zoomScale ; //2 IS SCALE FACTOR CGFloat xPos = (locationInImageView.x * 2) - width / 2; CGFloat yPos = (locationInImageView.y * 2) - height / 2; CGRect rect1 = CGRectMake(xPos, yPos, width, height); CGImageRef imageRef = CGImageCreateWithImageInRect([img1 CGImage], rect1); // YAHHH YOU HAVE EXACT IMAGE UIImage *img = [UIImage imageWithCGImage:imageRef scale:img1.scale orientation:img1.imageOrientation];