Fabric: Custom `[RCTViewComponentView hitTest:]` that takes `pointerEvents` into an account

Summary:
@public
In RN we have special `pointerEvents` prop that controls whether the View can be the target of touch events.
This is a pretty straight-forward implementation of that.

Reviewed By: sahrens

Differential Revision: D9688877

fbshipit-source-id: 1524647b0a33e4dd14563f531d636469bf3bdef7
This commit is contained in:
Valentin Shergin 2018-09-07 23:39:02 -07:00 коммит произвёл Facebook Github Bot
Родитель 1e3e2387d3
Коммит dbf5bea3c1
1 изменённых файлов: 16 добавлений и 0 удалений

Просмотреть файл

@ -196,6 +196,22 @@ using namespace facebook::react;
[self invalidateLayer];
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
auto viewProps = *std::static_pointer_cast<const ViewProps>(_props);
switch (viewProps.pointerEvents) {
case PointerEventsMode::Auto:
return [super hitTest:point withEvent:event];
case PointerEventsMode::None:
return nil;
case PointerEventsMode::BoxOnly:
return [self pointInside:point withEvent:event] ? self : nil;
case PointerEventsMode::BoxNone:
UIView *view = [super hitTest:point withEvent:event];
return view != self ? view : nil;
}
}
static RCTCornerRadii RCTCornerRadiiFromBorderRadii(BorderRadii borderRadii) {
return RCTCornerRadii {
.topLeft = (CGFloat)borderRadii.topLeft,