0
指定されたビューの境界線の外側のタッチを扱う際に上記の質問を満たしています。私はウェブサイト上で見つけるソリューションhitTestを上書きするために私に語った。イベント:このような方法:なぜsuperのhitTestを呼び出しても無限ループは発生しませんか?
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *view = [super hitTest:point withEvent:event];
if (view == nil) {
for (UIView *subView in self.subviews) {
CGPoint tp = [subView convertPoint:point fromView:self];
if (CGRectContainsPoint(subView.bounds, tp)) {
view = subView;
}
}
}
return view;
}
私は最初の行に著者が[super hitTest:point withEvent:event]
を呼び出すことに気づいた、と私も承知していますヒットテストは再帰的です。したがって、スーパーはサブビューのhitTestメソッドを呼び出す必要があり、後者はスーパーを再度呼び出すことになります。私はなぜそれが無限ループを引き起こさないのだろうか?ありがとう!
同様に、viewDidLoad()が無限ループを引き起こさない方法です。 –
サブ**ビュー**とサブ**クラス**を混在していませんか? –
ありがとうございます。私はその点を誤解している。私はスーパーとスーパービューをシンプルに混在させました。申し訳ありません。 – Stephen