クリックできないビューはどのようにイベントをクリックしますか?
1829 ワード
hitTextとpointInside
最近はHTML 5を見るものを用意していますが、時間が少し少ないので、簡単なものを書きましょう
二つの方法を紹介する
この2つの方法は一般的に組み合わせて使用される.
最下位実装
簡単な応用例の需要を挙げます:1つのビューは1つのマスクに遮られて、私達はマスクを通じてこのビューをクリックする必要があります(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event{//現在の座標系上の点をボタン上の点CGPoint btnP=[self convertPoint:point toView:self.btn]//判断点をボタン上にif([self.btn pointInside:btnP withEvent:event])/点をボタン上にreturn self.btn;else{ return [super hitTest:point withEvent:event]; } } ああこのような情況はとてもよくあるので、自分で体得します
最近はHTML 5を見るものを用意していますが、時間が少し少ないので、簡単なものを書きましょう
二つの方法を紹介する
// ,
//
//
// View ,
// point: ,point
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// view, view
UIView *fitView = [super hitTest:point withEvent:event];
return fitView;
}
// : ( )
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
return YES;
}
この2つの方法は一般的に組み合わせて使用される.
最下位実装
// -》 -》 UIApplication -> UIWindow
// BaseView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// 1.
if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) return nil;
// 2.
if ([self pointInside:point withEvent:event] == NO) return nil;
// 3.
NSInteger count = self.subviews.count;
for (NSInteger i = count - 1; i >= 0; i--) {
UIView *childView = self.subviews[i];
//
CGPoint childP = [self convertPoint:point toView:childView];
UIView *fitView = [childView hitTest:childP withEvent:event];
if (fitView) { // view
return fitView;
}
}
// , view
return self;
}
簡単な応用例の需要を挙げます:1つのビューは1つのマスクに遮られて、私達はマスクを通じてこのビューをクリックする必要があります