当用户执行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"];
答案 0 :(得分:2)
你有没有理由不直接设置图层的变换而不是使用动画?
这应该做你想要的:
- (void)respondToGesture:(UIRotationGestureRecognizer *)rec {
if (rec.state == UIGestureRecognizerStateChanged) {
CGAffineTransform currentTransform = squareLayer.affineTransform;
squareLayer.affineTransform = CGAffineTransformRotate(currentTransform, gesture.rotation);
gesture.rotation = 0;
}
}
如果您希望围绕用户旋转的中心而不是图层的中心进行旋转,则还需要调整squareLayer.anchorPoint
。
答案 1 :(得分:1)
单指旋转有一个开源(https://github.com/kirbyt/KTOneFingerRotationGestureRecognizer)。你可以看一下,会好多了。即使您只想要正常旋转手势,也可以查看代码以获得更好的旋转代码。它使用中心作为起源。