gpt4 book ai didi

iphone - 使用 MaskToBounds NO 处理触摸事件

转载 作者:行者123 更新时间:2023-11-29 13:11:17 25 4
gpt4 key购买 nike

我试图在我的应用程序中实现容器 View Controller 设计。然而我被告知我需要支持 iOS 4.3 设备,所以 iOS 5 中引入的官方 View Controller API 目前不是一个选项。

为了实现类似的行为,我使用了 hack。为我的 RootViewController 调整了 View 的大小,并向其添加了一个 subview ,它在 View 的边界之外。例如:RootView 的边界为 0,0,320,480。现在我将它的大小调整为 0,0,320,430,并在 0,430,320,60 处包含了一个 subview 。这是有效的,因为我使用 ApplicationFrame 进行所有计算,为我提供稳定的工作框架。但是我现在面临的问题是超出 View 范围的 subview 没有接收到触摸事件。 maskToBounds = NO 属性帮助我进行显示。但是触动?有人知道怎么做吗?

最佳答案

每当您希望 subview 在这种情况下接收触摸事件时,您可以执行以下操作:

1- 创建一个继承自 UIView 的新类并覆盖 hitTest:withEvent: 以允许 subview 拦截触摸:

@interface CustomView : UIView
@end

@implementation CustomView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
/// Check if the point is inside the subview
CGPoint newPoint = [subview convertPoint:point fromView:self];
if ([subview pointInside:newPoint withEvent:event]) {
/// Let the subview decide the return value
return [subview hitTest:newPoint withEvent:event];
}

/// Default route
return [super hitTest:point withEvent:event];
}

@end

2- 将 Root View 的类更改为我们的 CustomView(在 Xcode > Identity Inspector > Custom Class 的右侧面板中)。

我们完成了!

关于iphone - 使用 MaskToBounds NO 处理触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310052/

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