¿Cómo cambio el tamaño de UIView con respecto a la relación al arrastrar los bordes de las esquinas?

Tengo una UIView con algo de tamaño. Y estoy cambiando el tamaño de esa vista en el button hecho clic. Pero el cambio de tamaño de UIView depende de la relación como 3: 2, 4: 3, 16: 9. Y que el arrastre de UIView debe hacerse de acuerdo con la relación.

kResizeThumbSize 30

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; if ([((UIView *)(touch.view)) isEqual:canvas]) { touchStart = [[touches anyObject] locationInView:canvas]; isResizingLR = (canvas.bounds.size.width - touchStart.x < kResizeThumbSize && canvas.bounds.size.height - touchStart.y < kResizeThumbSize); isResizingUL = (touchStart.x <kResizeThumbSize && touchStart.y <kResizeThumbSize); isResizingUR = (canvas.bounds.size.width-touchStart.x < kResizeThumbSize && touchStart.y<kResizeThumbSize); isResizingLL = (touchStart.x <kResizeThumbSize && canvas.bounds.size.height -touchStart.y <kResizeThumbSize); } if(isResizingLR || isResizingUL|| isResizingLL || isResizingUR){ [canvas removeGestureRecognizer:panRecognizer]; } } - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint touchPoint = [[touches anyObject] locationInView:canvas]; CGPoint previous=[[touches anyObject]previousLocationInView:canvas]; float deltaWidth = touchPoint.x-previous.x; float deltaHeight = touchPoint.y-previous.y; if (isResizingLR) { canvas.frame = CGRectMake(canvas.frame.origin.x, canvas.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth); } if (isResizingUL) { canvas.frame = CGRectMake(canvas.frame.origin.x + deltaWidth, canvas.frame.origin.y + deltaHeight, canvas.frame.size.width - deltaWidth, canvas.frame.size.height - deltaHeight); } if (isResizingUR) { canvas.frame = CGRectMake(canvas.frame.origin.x ,canvas.frame.origin.y + deltaHeight, canvas.frame.size.width + deltaWidth, canvas.frame.size.height - deltaHeight); } if (isResizingLL) { canvas.frame = CGRectMake(canvas.frame.origin.x + deltaWidth ,canvas.frame.origin.y , canvas.frame.size.width - deltaWidth, canvas.frame.size.height + deltaHeight); } } 

Puedes probar esto:

Mira cuál de deltaWidth y deltaHeight es más grande como valor absoluto. Se convierte en un tamaño inicial y se aplica al marco tal como está. El otro se calcula a partir del delta de tamaño principal según la relación y luego se aplica a la ttwig y se ignora el delta real (más pequeño).

También es posible que necesite aplicar verificaciones de razón en el valor inicial deltaWidth agains deltaHeight , para determinar mejor qué cambio es mayor.