Tengo una subclase UIView que quiero mover dentro de su superview. Cuando el usuario toca el UIView en algún lugar fuera del self.center
, pero dentro de self.bounds
"salta" porque agrego la nueva ubicación al self.center
para lograr el movimiento real. Para evitar este comportamiento, intento establecer un punto de anclaje que permita al usuario tomar y arrastrar la vista a cualquier lugar dentro de sus límites.Configuración del punto de anclaje para la capa UIView
Mi problema es que cuando calculo el nuevo punto de anclaje (como se muestra en el siguiente código) no ocurre nada, la vista no cambia de posición en absoluto. Por otro lado, si configuro el punto de anclaje en un punto precalculado, puedo mover la vista (pero luego, por supuesto, "salta" al punto precalculado). ¿Cómo es que esto no funciona como se esperaba?
Gracias.
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
// Only support single touches, anyObject retrieves only one touch
UITouch *touch = [touches anyObject];
CGPoint locationInView = [touch locationInView:self];
// New location is somewhere within the superview
CGPoint locationInSuperview = [touch locationInView:self.superview];
// Set an anchorpoint that acts as starting point for the move
// Doesn't work!
self.layer.anchorPoint = CGPointMake(locationInView.x/self.bounds.size.width, locationInView.y/self.bounds.size.height);
// Does work!
self.layer.anchorPoint = CGPointMake(0.01, 0.0181818);
// Move to new location
self.center = locationInSuperview;
}
asegúrate de tener una comprensión completa de anchorPoint: http://stackoverflow.com/a/22188420/550393 – 2cupsOfTech