繁体   English   中英

CALayer转换

[英]CALayer transforming

当用户执行UIRotationGesture时,我需要旋转一个正方形。

我已经设置好手势了。 问题是,每次用户移动手指时,正方形都会返回到起始位置,然后动画到新位置。 而不是从先前的位置移动到新的位置。

也就是说,如果正方形旋转为90度,并且用户继续旋转到100,正方形将回到0度并动画为100。

本质上,我希望正方形在用户执行旋转手势时使其镜像。

- (void)respondToGesture:(UIRotationGestureRecognizer *)rec{

NSLog(@"Rotation: %f", rec.rotation);

[self rotateWithRadian:rec.rotation];

if (rec.state == UIGestureRecognizerStateEnded) {
    NSLog(@"gesture ended");
}

}



- (void)rotateWithRadian:(float)radian{

CABasicAnimation *spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

spin.removedOnCompletion = NO;

spin.fillMode = kCAFillModeForwards;

[spin setByValue:[NSNumber numberWithFloat:radian]];

[spin setDuration:1.0];

[squarelayer addAnimation:spin forKey:@"spinAnimation"];

您是否有理由不直接设置图层的变换而不是使用动画?

这应该做您想要的:

- (void)respondToGesture:(UIRotationGestureRecognizer *)rec {
    if (rec.state == UIGestureRecognizerStateChanged) {
        CGAffineTransform currentTransform = squareLayer.affineTransform;
        squareLayer.affineTransform = CGAffineTransformRotate(currentTransform, gesture.rotation);
        gesture.rotation = 0;
    }
}

如果希望旋转围绕用户旋转中心而不是图层中心发生,则还需要调整squareLayer.anchorPoint

有一个开放源代码( https://github.com/kirbyt/KTOneFingerRotationGestureRecognizer )用于单指旋转。 您可以检查出来,会更好。 即使只需要正常的旋转手势,也可以查看代码以获得更好的旋转代码。 它以中心为原点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM