Determinar se o ret de corte está totalmente contido no UIView girado
Premissa: estou construindo uma ferramenta de corte que lida com a rotação arbitrária de uma imagem com dois dedos e com o corte arbitrário.
Às vezes, a imagem acaba girando de forma a inserir espaço vazio para preencher uma lacuna entre a imagem girada e o recorte recortado (veja os exemplos abaixo).
Preciso garantir que a exibição da imagem, quando girada, se ajuste totalmente ao retângulo de corte. Caso contrário, preciso transformar novamente a imagem (ampliá-la) para que ela caiba nos limites do corte.
Usandoesta resposta, Implementei a capacidade de verificar se um UIImageView girado se cruza com o CGRect de corte, mas infelizmente isso não me diz se o retângulo de corte éinteiramente contido na visualização de imagem girada. Esperando que eu possa fazer algumas modificações fáceis nesta resposta?
Um exemplo visual de OK:
e não está bem, com o que eu preciso detectar e lidar:
Atualizar: método não está funcionando
- (BOOL)rotatedView:(UIView*)rotatedView containsViewCompletely:(UIView*)containedView {
CGRect rotatedBounds = rotatedView.bounds;
CGPoint polyContainedView[4];
polyContainedView[0] = [containedView convertPoint:rotatedBounds.origin toView:rotatedView];
polyContainedView[1] = [containedView convertPoint:CGPointMake(rotatedBounds.origin.x + rotatedBounds.size.width, rotatedBounds.origin.y) toView:rotatedView];
polyContainedView[2] = [containedView convertPoint:CGPointMake(rotatedBounds.origin.x + rotatedBounds.size.width, rotatedBounds.origin.y + rotatedBounds.size.height) toView:rotatedView];
polyContainedView[3] = [containedView convertPoint:CGPointMake(rotatedBounds.origin.x, rotatedBounds.origin.y + rotatedBounds.size.height) toView:rotatedView];
if (CGRectContainsPoint(rotatedView.bounds, polyContainedView[0]) &&
CGRectContainsPoint(rotatedView.bounds, polyContainedView[1]) &&
CGRectContainsPoint(rotatedView.bounds, polyContainedView[2]) &&
CGRectContainsPoint(rotatedView.bounds, polyContainedView[3]))
return YES;
else
return NO;
}