0

誰かが少し時間をかけて私にポインタを教えてもらえますか?

UIWindowにUIViewをアタッチしていて、ポイントのhitTestingで遊んでいます(ここで説明したいよりもはるかに複雑な理由で)。

ウィンドウのサブビューとしてアタッチされたビューを考えると、hitTestがそのビューを見つけることを期待しますが、次のようには表示されません。

- (void)test_hitTest_shouldFindTheViewAttachedToAWindow {
    UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 210, 520)];
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 20, 200, 500)];
    [window addSubview:view];

    // This is ok
    GHAssertEquals([view hitTest:CGPointMake(110, 270) withEvent:nil], view, nil);

    // This fails: why? I would expect it to return the view, but it return null.
    GHAssertEquals([view.window hitTest:CGPointMake(110, 270) withEvent:nil], view, nil);
}

ポイントは、ウィンドウの境界の内側をクリアすることですよね?なぜそれはビューを見つけられないのですか?

4

1 に答える 1

1

UIWindowはデフォルトで非表示に作成されます。つまり、hitTest:withEvent無視されます。設定するとview.window.hidden = NOhitTest:withEvent期待どおりに動作します。

于 2013-07-24T15:25:32.730 に答える