[英]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.