gpt4 book ai didi

objective-c - UIView touchesbegan 在动画期间没有响应

转载 作者:太空狗 更新时间:2023-10-30 03:37:00 24 4
gpt4 key购买 nike

我有一个继承了 UIImageView 的可拖动类。当 View 没有动画时,拖动效果很好。但是在动画时它不会响应触摸。动画完成后,触摸将再次起作用。但我需要它在触摸时暂停动画并在触摸结束时恢复。我花了一整天的时间研究它,但无法找出原因。

这是我的动画代码。

[UIView animateWithDuration:5.0f 
delay:0
options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction)
animations:^{
self.center = CGPointMake(160,240);
self.transform = CGAffineTransformIdentity;
}
completion:nil
];

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
NSLog(@"touch");
CGPoint pt = [[touches anyObject] locationInView:self];
startLocation = pt;
[self.layer removeAllAnimations];
[[self superview] bringSubviewToFront:self];
}

最佳答案

那是因为 ios 将你的动画 View 放置到目标位置,当动画开始时,但将它绘制在路径上。因此,如果您在移动时点击 View ,您实际上会点击其框架之外的某个地方。

在动画 View 的初始化中,将 userInteractionEnabled 设置为 NO。所以触摸事件由父 View 处理。

self.userInteractionEnabled = NO;

在您的父 View 的 touchesBegan 方法中,检查您的动画 View 的 presentationLayer 位置。如果它们与触摸位置匹配,则将 touchesBegan 消息重定向到该 View 。

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint point = [[touches anyObject] locationInView:self.view];
CGPoint presentationPosition = [[animatingView.layer presentationLayer] position];

if (point.x > presentationPosition.x - 10 && point.x < presentationPosition.x + 10
&& point.y > presentationPosition.y - 10 && point.y < presentationPosition.y + 10) {
[animatingView touchesBegan:touches withEvent:event];
}
}

关于objective-c - UIView touchesbegan 在动画期间没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4311645/

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