ぶつからない?
もちろん、指が自動停止するわけではありません(^^)
画面全体を覆う透明なビューを作成し、そこにボタン等を配置したい場合があります。このような場合、透明ビューのタッチ判定をなくす必要があります。
userInteractionEnabledをNOにすればタッチを無効にできますが、サブビューでタッチを処理できなくなります。そこで、userInteractionEnabledはYESのままにして、hitTestを上書きすることで、親ビューへのタッチを無視しつつ、サブビューへのタッチを処理する事ができます。
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *hitView = [super hitTest:point withEvent:event];
if (self == hitView) {
return nil;
}
return hitView;
}
どんな時に使うのか?
何かをフロート表示したい時に直接keyWindowにアクセスせずに、このようなフルスクリーンViewを挟んでおくと非常に楽になります。iOS7,ioS8の回転処理に対する対応も、フルスクリーンViewの中で一元処理できます。
さらに言うと、Status barを含むバージョン、含まないバージョンの両方を用意しておくと、非常に捗ります。これはPoin 1.9系に導入するテクニックです。
おっと、現実逃避はやめてコードを書く時間だ。。。