blob: 5e099c3a34f6cff12843700316c9ffd722b3f8cc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#import "WXView.h"
#import "WXComponent.h"
#import "WXLayer.h"
#import "WXComponent_internal.h"
@implementation WXView
+ (Class)layerClass
{
return [WXLayer class];
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
/**
* Capturing touches on a subview outside the frame of its superview if it does not clips to bounds.
*/
if (self.hidden || !self.userInteractionEnabled) {
return nil;
}
UIView* result = [super hitTest:point withEvent:event];
if (result) {
return result;
}
// if clips to bounds, no need to detect outside views.
if (self.clipsToBounds) {
return nil;
}
for (UIView* subView in [self.subviews reverseObjectEnumerator]) {
if (subView.hidden) {
continue;
}
CGPoint subPoint = [self convertPoint:point toView:subView];
result = [subView hitTest:subPoint withEvent:event];
if (result) {
return result;
}
}
return nil;
}
- (BOOL)accessibilityPerformMagicTap
{
if (self.wx_component->_accessibilityMagicTapEvent) {
[self.wx_component fireEvent:@"accessibilityMagicTap" params:nil];
}
return [super accessibilityPerformMagicTap];
}
@end