我正在尝试检测动画视图的UISubview上的触摸
这是我的检测代码:
//simple but not very elegant way of getting correct frame
CGRect keepFrame = self.fishContainer.layer.frame;
self.fishContainer.layer.frame = [[self.fishContainer.layer presentationLayer] frame];
//get touch location, taking presentation layer into account. (See above)
CGPoint p = [sender locationInView:self.fishContainer];
CALayer *layer =[self.fishContainer.layer presentationLayer];
//apply relevant transform
p = CGPointApplyAffineTransform(p,layer.affineTransform);
EBLog(@"checking point %@",NSStringFromCGPoint(p));
UIView *vToRemove = nil;
//find topmost view containing touched point
for (UIView *v in self.parasites) {
EBLog(@"-BOUND %@",NSStringFromCGRect(v.frame));
if(CGRectContainsPoint(v.frame, p))
{
vToRemove = v;
}
}
//OK, we have a view. Let's remove it.
if(vToRemove)
{
EBLog(@"found one");
[vToRemove removeFromSuperview];
[self.parasites removeObject:vToRemove];
if ([self.parasites count] == 0) {
[self showWinnerScreen];
[self stopGame];
}
}
//restore view frame
self.fishContainer.layer.frame = keepFrame;
只要我没有为parasiteArea
父视图设置动画,一切正常。
当我为parasiteArea
的父视图设置动画(A CAAnimation
,包括视图移动,视图比例和视图旋转)时,触摸超出预期子视图的范围。
更新
我通过使用presentationLayer
属性和CGPointApplyAffineTransform
来管理大多数情况下的检测工作(请参阅上面的代码)。然而,仍有一些情况下它可以工作。
我想我需要将触摸点转换为CAAnimation
的坐标空间。
或类似的东西?有什么建议吗?
答案 0 :(得分:0)
我最终使用的是UIView animateWithDuration
而不是CAAninmation
。为了我的目的,有限的动画可能就足够了。