gpt4 book ai didi

iphone - 超越 UIView 的交互

转载 作者:IT老高 更新时间:2023-10-28 11:22:12 27 4
gpt4 key购买 nike

当 UIButton 的框架位于其父框架之外时,UIButton(或任何其他控件)是否有可能接收触摸事件?因为当我尝试这个时,我的 UIButton 似乎无法接收任何事件。我该如何解决这个问题?

最佳答案

是的。您可以覆盖 hitTest:withEvent: 方法以返回一个 View ,该 View 包含比该 View 包含的更大的点集。见 UIView Class Reference .

编辑:示例:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
CGFloat radius = 100.0;
CGRect frame = CGRectMake(-radius, -radius,
self.frame.size.width + radius,
self.frame.size.height + radius);

if (CGRectContainsPoint(frame, point)) {
return self;
}
return nil;
}

编辑2:(澄清后:)为了确保按钮被视为在父级范围内,您需要覆盖 pointInside:withEvent: in父级包含按钮的框架。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if (CGRectContainsPoint(self.view.bounds, point) ||
CGRectContainsPoint(button.view.frame, point))
{
return YES;
}
return NO;
}

注意上面用于覆盖 pointInside 的代码并不完全正确。正如 Summon 在下面解释的那样,请执行以下操作:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
if ( CGRectContainsPoint(self.oversizeButton.frame, point) )
return YES;

return [super pointInside:point withEvent:event];
}

请注意,您很可能会使用 self.oversizeButton 作为此 UIView 子类中的 IBOutlet;然后您可以将有问题的“超大按钮”拖动到有问题的特殊 View 。 (或者,如果由于某种原因你在一个项目中经常这样做,你会有一个特殊的 UIButton 子类,你可以查看这些类的 subview 列表。)希望它有所帮助。

关于iphone - 超越 UIView 的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5432995/

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