我正在尝试在ControlsView
中touchUpInside
为UIButton
设置动画,这是附加图像中白色方块内的胡萝卜字符。当按下按钮时,将触发委托方法,controlsView
被动画化。问题是因为UIButton
超出了controlsView
的范围,所以它不会收到触摸信息。
我已经考虑了很多,并阅读了一些潜在的候选解决方案。例如通过覆盖hitTest:withEvent:
来检测超级视图上的触摸事件。但是,UIButton
实际上是CockPitView
的子视图,它是ControlsView
的子视图,是MainView
的子视图。看起来,MainView是UIButton
真正位于其中的矩形。所以我会覆盖hitTest
并将触摸信息传递给CockPitView
,然后我可以在那里{ {1}}触发其动作回调?
有没有人遇到过这个或类似的问题,并对如何进行有任何建议?
答案 0 :(得分:1)
您应该在自定义视图hitTest
CockPitView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (!self.clipsToBounds && !self.hidden && self.alpha > 0) {
for (UIView *subview in self.subviews.reverseObjectEnumerator) {
CGPoint subPoint = [subview convertPoint:point fromView:self];
UIView *result = [subview hitTest:subPoint withEvent:event];
if (result != nil) {
return result;
}
}
}
return nil;
}
CockPitView
必须是UIView
答案 1 :(得分:1)
您可能想要使用getline
。在-pointInside:withEvent:
的超级评论中,即button
,覆盖以下方法:
ControlsView
通过这样做,您的- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
// self.button is the button outside the bounds of your ControlsView
if (CGRectContainsPoint(self.button.bounds, [self convertPoint:point toView:self.button])) {
return YES;
}
return [super pointInside:point withEvent:event];
}
声称您的按钮范围内的点应被视为ControlsView
内的点。