作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在我的应用程序中实现容器 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/
我是一名优秀的程序员,十分优秀!