clipstobounds 元素下不可见部分的元素的可访问性
Accessibility of elements underneath the invisble part of cliptobound(ed) element
我有一个 MKMapView
mainMap
的正方形比例,它的宽度等于 iPhone 屏幕宽度。我使用以下方法使其循环:
mainMap.layer.cornerRadius = mainMap.frame.width/2
mainMap.clipsToBounds = true
现在我有一个 UIButton
,它位于 mapView
下方,但它只是部分可见。
这一切都很好,但是当我点击按钮时,点击被 mapView 的不可见部分捕获。
是否需要额外的步骤来使 mapView 的不可见部分不干扰用户界面?
您需要覆盖背景视图上的命中测试 (hitTest:withEvent:
)。你会打电话给 super
,而且大多数时候你会 return 不管它 return 是什么。但是如果它 return 是地图视图,您将根据地图视图的框架检查点(第一个参数)并确定它是否在圆圈内 - 这很容易计算,因为 CGPath 有一个 CGPathContainsPoint
函数。如果是,那么 return 是 super
给你的,地图视图。但如果不是,那么return nil
。触摸现在 "fall through" 到它后面的任何东西,如果那是按钮,按钮将接收点击。
我有一个 MKMapView
mainMap
的正方形比例,它的宽度等于 iPhone 屏幕宽度。我使用以下方法使其循环:
mainMap.layer.cornerRadius = mainMap.frame.width/2
mainMap.clipsToBounds = true
现在我有一个 UIButton
,它位于 mapView
下方,但它只是部分可见。
这一切都很好,但是当我点击按钮时,点击被 mapView 的不可见部分捕获。
是否需要额外的步骤来使 mapView 的不可见部分不干扰用户界面?
您需要覆盖背景视图上的命中测试 (hitTest:withEvent:
)。你会打电话给 super
,而且大多数时候你会 return 不管它 return 是什么。但是如果它 return 是地图视图,您将根据地图视图的框架检查点(第一个参数)并确定它是否在圆圈内 - 这很容易计算,因为 CGPath 有一个 CGPathContainsPoint
函数。如果是,那么 return 是 super
给你的,地图视图。但如果不是,那么return nil
。触摸现在 "fall through" 到它后面的任何东西,如果那是按钮,按钮将接收点击。