Cómo rotar y cambiar el tamaño de la vista de image con un solo dedo

Estoy desarrollando una aplicación que tiene la function de cambiar el tamaño y girar la vista de image arrastrando el button de la esquina inferior derecha.

Vi una aplicación que tiene la característica de que si arrastra el button de la esquina inferior derecha en forma diagonal, el tamaño de la image ha cambiado de tamaño, o si arrastramos el button hacia la izquierda o la derecha, imageview ha girado según la dirección. Deseo implementar esta function en mi aplicación

Estoy luchando para implementar la rotation de un solo dedo, así como cambiar el tamaño de la image.

Podría implementar con éxito el cambio de tamaño de la vista de image arrastrando su button de la esquina inferior derecha. Pero no tengo el conocimiento suficiente para agregar rotation a la vista de la image.

Por favor, guíame de manera correcta.

Agregué el código a continuación para cambiar el tamaño de la vista de la image arrastrando su esquina derecha.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ UITouch *touch = [[event allTouches] anyObject]; touchStart = [[touches anyObject] locationInView:imageView]; isResizingLR = (containerVw.bounds.size.width - touchStart.x < kResizeThumbSize && containerVw.bounds.size.height - touchStart.y < kResizeThumbSize); } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ CGPoint touchPoint = [[touches anyObject] locationInView:imageView]; CGPoint previous=[[touches anyObject]previousLocationInView:imageView]; UITouch *touch = [[event allTouches] anyObject]; float deltaWidth = touchPoint.x-previous.x; float deltaHeight = touchPoint.y-previous.y; if (isResizingLR) { containerVw.frame = CGRectMake(containerVw.frame.origin.x, containerVw.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth); imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth); dragIm.frame = CGRectMake(containerVw.frame.size.width-10, containerVw.frame.size.height-10,20,20); if (!isResizingLR) { containerVw.center = CGPointMake(containerVw.center.x + touchPoint.x touchStart.x,containerVw.center.y + touchPoint.y - touchStart.y); } } 

introduzca la descripción de la imagen aquí

Había golpeado el mismo obstáculo que el tuyo, así que desarrollé mis propios modules ZDStickerView . Sería una buena reference.

En primer lugar, asegúrate de que tu visión de autoresizingMask debería ser flexible.

  autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight 

de lo contrario, el cambio de tamaño no funcionaría correctamente.

En segundo lugar, le recomiendo que use las funciones "CGAffineTransformMakeRotation" y "atan2" para resolver el problema de rotation, así:

  float ang = atan2([recognizer locationInView:self.superview].y - self.center.y, [recognizer locationInView:self.superview].x - self.center.x); float angleDiff = deltaAngle - ang; self.transform = CGAffineTransformMakeRotation(-angleDiff); 

Tercero, asegúrese de usar la coorderada relativa, así:

  self.transform = CGAffineTransformMakeRotation(-angleDiff); 

He solucionado este problema y cargado este control en cocoacontrols

http://www.cocoacontrols.com/controls/tdresizerview

Y el código de muestra

https://www.dropbox.com/s/yb0vzy0wao52bgt/SampeResizeView.zip

Respuesta actualizada

https://www.cocoacontrols.com/controls/zdstickerview

Esto podría ayudar, https://github.com/zedoul/ZDStickerView .

IQStickerView con OneFingerRotation, Escala, Cambiar tamaño y Cerrar la function.

caracteristicas:

  1. Escala de rotation de un dedo.
  2. Un dedo cambiar el tamaño.
  3. Activar / Desactivar Rotación, Escala, Cambiar el tamaño con properties.
  4. Gestión automática de múltiples IQStickerView.
  5. Puede trabajar con UIScrollView también.
  6. Respuesta rápida