Единственный обходной путь, который я нашел для такого случая, - это создание экземпляра вида, прозрачного для касаний, в качестве основного вида.В этом случае внутренний вид будет реагировать на прикосновения, поскольку он соответствует границам основного.В классе, который я сделал из разных примеров, найденных в сети, я могу контролировать уровень «видимости касанием» следующим образом: полностью видимый - все касания заканчиваются в представлении.только подпредставления - само представление невидимо, но подпредставления получают свои прикосновения.Полностью невидимый - я думаю, что он довольно понятен:)
Я не пытался использовать его с распознавателями жестов, но не думаю, что возникнут какие-либо проблемы, поскольку он отлично работает с обычными прикосновениями.
Код прост ...
TransparentTouchView.h
#import <UIKit/UIKit.h>
typedef enum{
TransparencyTypeNone = 0, //act like usual uiview
TransparencyTypeContent, //only content get touches
TransparencyTypeFull //fully transparent for touches
}TransparencyType;
@interface TransparentTouchView : UIView {
TransparencyType _transparencyType;
}
@property(nonatomic,assign)TransparencyType transparencyType;
@end
TransparentTouchView.m
#import "TransparentTouchView.h"
@implementation TransparentTouchView
@synthesize
transparencyType = _transparencyType;
- (id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
// UIView will be "transparent" for touch events if we return NO
switch (_transparencyType) {
case TransparencyTypeContent:
for(UIView* subview in self.subviews){
CGPoint p = [subview convertPoint:point fromView:self];
if([subview pointInside:p withEvent:event]){
return YES;
}
}
return NO;
break;
case TransparencyTypeFull:
return NO;
default:
break;
}
return YES;
}
@end
Я считаю, что вы можете приспособить его для своих нужд.