Rotation UIImage par un degré personnalisé

J'utilise le code suivant pour y parvenir. Le problème est lorsque l'image est tournée, elle met à l'échelle l'image le plus proche du degré est à 45 '.

Lorsque l'image est réglée sur 90 'et ses multiples, il n'y a pas de problème avec la taille de l'image. Mais quand le degré se rapproche de 45 'et ses multiples, il y a un rétrécissement notable de la taille de l'image. Je ne veux pas changer la taille de l'image. Comment dois-je aborder ce problème?

- (UIImage *)imageRotatedByRadians:(CGFloat)radians img:(UIImage *)img { // calculate the size of the rotated view's containing box for our drawing space UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,img.size.width, img.size.height)]; UIView *nonrotatedViewBox = rotatedViewBox; CGAffineTransform t = CGAffineTransformMakeRotation(radians); rotatedViewBox.transform = t; CGSize rotatedSize = rotatedViewBox.frame.size; // Create the bitmap context UIGraphicsBeginImageContext(nonrotatedViewBox.frame.size); CGContextRef bitmap = UIGraphicsGetCurrentContext(); // Move the origin to the middle of the image so we will rotate and scale around the center. CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); //Rotate the image context CGContextRotateCTM(bitmap, radians); // Now, draw the rotated/scaled image into the context CGContextScaleCTM(bitmap, 1.0, -1.0); CGContextDrawImage(bitmap, CGRectMake(-img.size.width / 2, -img.size.height / 2, img.size.width, img.size.height), [img CGImage]); UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return newImage; } 

les dimensions de votre vue sont fausses, vous ne voulez pas dessiner l'image dans la largeur et la hauteur divisée par 2. Parce que quand une image est tournée sa largeur devient (en se référant à un carré parfait) est la largeur fois 2 fois sqr (2). donc si vous aviez une largeur et une hauteur de 10 alors votre nouvelle largeur (à un angle de 45 degrés) serait comprise entre 14 et 15 … donc votre context dessine une image 14×14 dans une zone de 10×10

vous pourriez passer par des calculs compliqués pour get les dimensions parfaites en utilisant la geometry, ou vous pourriez l'ailer et dire | double percentRotated = (radians% M_PI_4) / M_PI_4; double newWidth = (percentRotated == 0? img.size.width: img.size.width * (1 + (percentRotated% 0.25))); et faire la même chose pour la hauteur, #lazyprogrammer