ios - rotacion - ¿Cómo obtener una posición perfecta de la vista giratoria?
rotar pantalla iphone 6 (2)
Para obtener los parámetros de la vista durante la animación, debe usar view.layer.presentationLayer
ADICIONAL:
Para obtener la coordenada de la esquina superior izquierda de la vista, use el siguiente código:
- (CGPoint)currentTopLeftPointOfTheView:(UIView *)view
{
CGRect rect = view.bounds;
rect.origin.x = view.center.x - 0.5 * CGRectGetWidth(rect);
rect.origin.y = view.center.y - 0.5 * CGRectGetHeight(rect);
CGPoint originalTopLeftCorner = CGPointMake(CGRectGetMinX(rect), CGRectGetMinY(rect));
CGPoint rectCenter = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
CGFloat radius = sqrt(pow(rectCenter.x - originalTopLeftCorner.x, 2.0) + pow(rectCenter.y - originalTopLeftCorner.y, 2.0));
CGFloat originalAngle = M_PI - acos((rectCenter.x - originalTopLeftCorner.x) / radius);
CATransform3D currentTransform = ((CALayer *)view.layer.presentationLayer).transform;
CGFloat rotation = atan2(currentTransform.m12, currentTransform.m11);
CGFloat resultAngle = originalAngle - rotation;
CGPoint currentTopLeftCorner = CGPointMake(round(rectCenter.x + cos(resultAngle) * radius), round(rectCenter.y - sin(resultAngle) * radius));
return currentTopLeftCorner;
}
El CGPoint
resultante será la coordenada de la esquina superior izquierda de su vista (girada) relativa a su supervista.
Tengo una vista y estoy rotando esa vista usando CABasicAnimation
. Ahora mi problema es cómo puedo obtener una posición perfecta de esa vista mientras rota. He intentado muchos tipos de códigos, pero no puedo obtener una posición perfecta durante la rotación de esa vista.
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
NSNumber *currentAngle = [CircleView.layer.presentationLayer valueForKeyPath:@"transform.rotation"];
rotationAnimation.fromValue = currentAngle;
rotationAnimation.toValue = @(50*M_PI);
rotationAnimation.duration = 50.0f; // this might be too fast
rotationAnimation.repeatCount = HUGE_VALF; // HUGE_VALF is defined in math.h so import it
[CircleView.layer addAnimation:rotationAnimation forKey:@"rotationAnimationleft"];
Estoy usando este código para rotar mi vista.
También adjunté una foto de mi vista.
Gracias de antemano, por favor ayuda si lo sabes.
Establecer la posición de la capa que lo que
[layer setPosition:endpoint];
O también puede recomendar este CABasicAnimation rotate vuelve a la posición original