descargar - split view ipad mini 2
UIPinchGestureRecognizer posiciona la vista pellizcada entre los dos dedos (2)
Eche un vistazo al proyecto de muestra Touches . Específicamente estos métodos podrían ayudarlo a:
// scale and rotation transforms are applied relative to the layer''s anchor point
// this method moves a gesture recognizer''s view''s anchor point between the user''s fingers
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
UIView *piece = gestureRecognizer.view;
CGPoint locationInView = [gestureRecognizer locationInView:piece];
CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];
piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
piece.center = locationInSuperview;
}
}
// scale the piece by the current scale
// reset the gesture recognizer''s rotation to 0 after applying so the next callback is a delta from the current scale
- (void)scalePiece:(UIPinchGestureRecognizer *)gestureRecognizer
{
[self adjustAnchorPointForGestureRecognizer:gestureRecognizer];
if ([gestureRecognizer state] == UIGestureRecognizerStateBegan || [gestureRecognizer state] == UIGestureRecognizerStateChanged) {
[gestureRecognizer view].transform = CGAffineTransformScale([[gestureRecognizer view] transform], [gestureRecognizer scale], [gestureRecognizer scale]);
[gestureRecognizer setScale:1];
}
}
Implementé con éxito una pizca de un zoom de una vista. Sin embargo, la vista no se ubica donde yo deseaba. Para los stackoverflowers con un iPad, me gustaría que mi vista se centre como en el iPad Photos.app: cuando pellizcas y amplías un álbum, las fotos se muestran en una vista que se está expandiendo. Esta vista se centra aproximadamente con la esquina superior derecha en el primer dedo y el dedo inferior izquierdo en el otro dedo. Lo mezclé con un reconocedor de sartenes, pero de esta manera el usuario siempre tiene que pellizcar, y luego hacer una panorámica para ajustar.
Aquí hay una explicación tan gráfica, podría publicar un video de mi aplicación si no está claro (no es un secreto, estoy tratando de reproducir las fotos.app del iPad ...)
Entonces, para una posición inicial de los dedos, comienza el zoom:
Este es el cuadro real "ampliado" por ahora. El cuadrado es más grande, pero la posición está debajo de los dedos
Esto es lo que me gustaría tener: el mismo tamaño, pero diferente origen.x e y:
(perdón por mis pobres habilidades de photoshop ^^)
Puede obtener el CGPoint
del punto medio entre dos dedos a través del siguiente código en el método que handlingPinchGesture
CGPoint
.
CGPoint point = [sender locationInView:self];
Mi método handlePinchGesture
completo está a continuación.
/*
instance variables
CGFloat lastScale;
CGPoint lastPoint;
*/
- (void)handlePinchGesture:(UIPinchGestureRecognizer *)sender {
if ([sender numberOfTouches] < 2)
return;
if (sender.state == UIGestureRecognizerStateBegan) {
lastScale = 1.0;
lastPoint = [sender locationInView:self];
}
// Scale
CGFloat scale = 1.0 - (lastScale - sender.scale);
[self.layer setAffineTransform:
CGAffineTransformScale([self.layer affineTransform],
scale,
scale)];
lastScale = sender.scale;
// Translate
CGPoint point = [sender locationInView:self];
[self.layer setAffineTransform:
CGAffineTransformTranslate([self.layer affineTransform],
point.x - lastPoint.x,
point.y - lastPoint.y)];
lastPoint = [sender locationInView:self];
}