Определите, содержится ли прямоугольник обрезки полностью в повернутом UIView
Предпосылка: я создаю инструмент кадрирования, который обрабатывает произвольное вращение изображения двумя пальцами, а также произвольное кадрирование.
Иногда изображение оказывается повернутым таким образом, что вставляется пустое пространство, чтобы заполнить промежуток между повернутым изображением и прямоугольником кадрирования (см. Примеры ниже).
Мне нужно убедиться, что изображение при повороте полностью помещается в прямоугольник обрезки. Если этого не произойдет, мне нужно повторно преобразовать изображение (увеличить его), чтобы оно вписалось в границы обрезки.
С помощьюэтот ответЯ реализовал возможность проверять, пересекается ли повернутый UIImageView с CGRect обрезки, но, к сожалению, это не говорит мне, является ли прямоугольник кадрированияполностью содержится в повернутом изображении. Надеетесь, что я смогу внести несколько простых изменений в этот ответ?
Наглядный пример ОК:
и не хорошо, то, что мне нужно обнаружить и иметь дело с:
Обновить: не работает метод
- (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;
}