gpt4 book ai didi

ios - 在 UIViews 层动画后,UIView 上的 UIPanGestureRecognizer 行为异常

转载 作者:可可西里 更新时间:2023-11-01 04:44:11 25 4
gpt4 key购买 nike

我有一系列 UIView,我沿着弧线制作动画。每个 View 上都有一个 UIPanGestureRecognizer,它在任何动画发生之前都按预期工作。

然而,在对 View 进行动画处理后(使用下面对 View 层进行动画处理的方法),手势无法按预期工作;事实上,它们看起来就像在原来的屏幕位置上工作。

我尝试了各种方法,包括将 View 框架和/或边界与动画层上的相匹配,甚至删除现有手势并再次创建和添加它们(下面未显示)。

如果有人知道发生了什么或者可以让我走上解决问题的道路,我们将不胜感激。

编辑 iMartin 的更改建议

pathAnimation.removedOnCompletion = NO;

pathAnimation.removedOnCompletion = YES;

view.layer.position = ... //

让我走上了解决问题的道路。

原始代码:

- (void)animateUIViewAlongArc:(UIView*)view clockwise:(BOOL)clockwise duration:(float)duration
{
[UIView animateWithDuration:duration animations:^{

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimationanimationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.repeatCount = 1;

CGPoint viewCenter = view.objectCenter;
CGMutablePathRef arcPath = CGPathCreateMutable();
CGPathMoveToPoint(arcPath, NULL, viewCenter.x, viewCenter.y);

float angleOfRotation = self.angleIncrement;
if (clockwise == NO)
{
angleOfRotation *= -1.0f;
}

float fullwayAngle = view.angle + angleOfRotation;
CGPoint fullwayPoint = pointOnCircle(self.center, self.radius, fullwayAngle);

CGPathAddRelativeArc(arcPath, NULL, self.center.x, self.center.y, self.radius, view.angle, angleOfRotation);
pathAnimation.path = arcPath;
CGPathRelease(arcPath);

[view.layer addAnimation:pathAnimation forKey:@"arc"];

view.angle = fullwayAngle;
view.objectCenter = fullwayPoint;

} completion:^(BOOL finished){
if (finished)
{
CGRect frame = view.layer.frame;
CGRect bounds = view.layer.bounds;

view.frame = frame;
view.bounds = bounds;
}
}];

最佳答案

你有没有在动画之后检查view/layer的frame?

我认为问题在于,您所看到的不是您得到的层本身并没有改变它的位置/框架,只是它的 presentationLayer 改变了。 表示层是你在屏幕上实际看到的。如果删除此行,您会看到:

pathAnimation.removedOnCompletion = NO; // Delete or set to YES

将此设置为 NO 会导致表示层在屏幕上的位置与您的 View 不同。
您应该做的是,在向图层添加动画之前设置图层的最终位置

view.layer.position = finalPosition; // You should calculate this
[view.layer addAnimation:pathAnimation forKey:@"arc"];

关于ios - 在 UIViews 层动画后,UIView 上的 UIPanGestureRecognizer 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com