ios rotar la image y el zoom, por lo que se ajusta al marco original como en instagram

En instagram cuando giras la image, se amplía, por lo que no puedes ver esas esquinas en ángulo. Eso es perfecto.

Este tema se analiza aquí: https://math.stackexchange.com/questions/61005/resizing-a-rectangle-to-always-fit-into-its-unrotated-space

Me pregunto si hay alguna solución list para usar, alguna biblioteca que incluya esta function.

Sé cómo rotar o ampliar la image. Simplemente no sé cuánto será el zoom después de la rotation de acuerdo con la relación de aspecto y el ángulo.

No conozco ninguna biblioteca, pero los siguientes methods deben proporcionar lo que necesita. Suponga que tiene una vista de tamaño contentSize , que desea rotar a través de radianes de angle y escala para completar completamente (sin esquinas "vacías") una vista de tamaño containerSize . El primer método a continuación devolverá (como double ) el factor de escala que debe aplicar.

Para completar, el segundo método a continuación proporcionará el factor de escala si desea rotar una vista de tamaño contentSize través de radianes de angle y escalarlo para asegurar si se ajusta completamente dentro del containerSize Size (por lo que ninguna de sus esquinas se extiende más allá de los bordes).

Ambos methods suponen que las dos vistas tienen el mismo centro.

 -(double)scaleToFill:(CGSize)containerSize withSize:(CGSize)contentSize atAngle:(double)angle { double theta = fabs(angle - 2*M_PI*truncf(angle/M_PI/2) - M_PI); if (theta > M_PI_2) { theta = fabs(M_PI - theta); } double h = contentSize.height; double H = containerSize.height; double w = contentSize.width; double W = containerSize.width; double scale1 = (H*cos(theta) + W*sin(theta))/h; double scale2 = (H*sin(theta) + W*cos(theta))/w; double scaleFactor = MAX(scale1, scale2); return scaleFactor; } -(double)scaleToFit:(CGSize)contentSize atAngle:(double)angle withinSize:(CGSize)containerSize { double theta = fabs(angle - 2*M_PI*truncf(angle/M_PI/2) - M_PI); if (theta > M_PI_2) { theta = fabs(M_PI - theta); } double h = contentSize.height; double H = containerSize.height; double w = contentSize.width; double W = containerSize.width; double scale1 = H/(h*cos(theta) + w*sin(theta)); double scale2 = W/(h*sin(theta) + w*cos(theta)); double scaleFactor = MIN(scale1, scale2); return scaleFactor; } 

Puede usar estos con algo como:

 double scaleFactor = [self scaleToFill:self.containerView.bounds.size withSize:self.rotatedView.bounds.size atAngle:self.currentAngle]; CGAffineTransform rotation = CGAffineTransformMakeRotation(self.currentAngle); CGAffineTransform scaledRotation = CGAffineTransformScale(rotation, scaleFactor, scaleFactor); self.rotatedView.transform = scaledRotation;