Convertir CGPoints de una vista a otra relativamente para una animation

Estoy tratando de hacer una animation donde muevo un CGPoint de una vista a otra, quiero encontrar las coorderadas donde el punto va a ser en reference al primero para que pueda hacer la animation.

Entonces, digamos que tengo un punto (24,15) en view2 y me gustaría animarlo para ver1, todavía quiero mantener el valor del punto dentro de la nueva vista cuando agrego el punto como una subvista de la nueva vista, pero para la animation necesito saber el valor de dónde estaría el punto para poder hacer una interpolación.

Consulte este gráfico:

introduzca la descripción de la imagen aquí

Ahora esto es lo que trato de hacer:

customObject *lastAction = [undoStack pop]; customDotView *aDot = lastAction.dot; CGPoint oldPoint = aDot.center; CGPoint newPoint = lastAction.point; newPoint = [lastAction.view convertPoint:newPoint toView:aDot.superview]; CABasicAnimation *anim4 = [CABasicAnimation animationWithKeyPath:@"position"]; anim4.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]; anim4.fromValue = [NSValue valueWithCGPoint:CGPointMake(oldPoint.x, oldPoint.y )]; anim4.toValue = [NSValue valueWithCGPoint:CGPointMake( newPoint.x, newPoint.y )]; anim4.repeatCount = 0; anim4.duration = 0.1; [aDot.layer addAnimation:anim4 forKey:@"position"]; [aDot removeFromSuperview]; [lastAction.view addSubview:aDot]; [lastAction.view bringSubviewToFront:aDot]; aDot.center = newPoint; 

¿Algunas ideas?

Es más fácil verlo con animaciones en bloques. Creo que el objective es hacer la animation de una subvista view2 en su espacio de coorderadas, luego, cuando finalice la animation, agregue una subvista a view1 usando la position final convertida en el nuevo espacio de coorderadas.

 // assume we have a subview of view2 called UIView *dot; // assume we want to move it by some vector relative to it's initial position // call that CGPoint offset; // compute the end point in view2 coords, that's where we'll do the animation CGPoint endPointV2 = CGPointMake(dot.center.x + offset.x, dot.center.y + offset.y); // compute the end point in view1 coords, that's where we'll want to add it in view1 CGPoint endPointV1 = [view2 convertPoint:endPointV2 toView:view1]; [UIView animateWithDuration:1.0 animations:^{ dot.center = endPointV2; } completion:^(BOOL finished) { dot.center = endPointV1; [view1 addSubview:dot]; }]; 

Tenga en count que agregar punto para ver1 lo elimina de la vista2. También tenga en count que si view1 debería tener clipsToBounds == NO si el vector de desplazamiento mueve el punto fuera de sus límites.