0

iOS で興味深いバグを見つけましたが、私が間違っていると信じようとしています。あなたは2つのことをしなければなりません:

1) iOS 用のシングルビュー テンプレートを作成する

2) ViewController.m に小さな関数を書きます:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch* touch = [touches anyObject];
    CGPoint point = [touch locationInView:[touch view]];
    NSLog(@"%@", NSStringFromCGPoint(point));
}// so u can detect points of your touch

したがって、ディスプレイ上で指を画面の上から下 (ポートレート モード) に移動しようとすると、[-5.5 .. 469]の範囲でポイントが取得されます... これは説明できません。これはデバイス上でのみ発生し、シミュレーターでは発生します。正常に動作します。

いくつかのデバッグ情報:

ステータスバーあり、NO wantFullScreenLayout 範囲: [-25.5 .. 449]

ステータスバーとYESが欲しいFullScreenLayoutの範囲は次のとおりです:[-5.5 .. 469]

ステータスバーなしで NO/YES FullScreenLayout の範囲は [-5.5 .. 469] です。


ステータスバーあり、NO wantFullScreenLayout view.frame は (0, 20, 320, 460) で、view.bounds は (0, 0, 320, 460) です

ステータスバーとYESが欲しいフルスクリーンレイアウトview.frameは(0、0、320、480)で、view.boundsは(0、0、320、480)です

ステータスバーなし、NO/YES FullScreenLayout view.frame は (0, 0, 320, 480) で、view.bounds も (0, 0, 320, 480)


このことを説明するのを手伝ってください、それはデバイスでのみ起こります...

4

3 に答える 3

0

これは、フィンガーペインティング プログラムに関する Apple のチュートリアルの 1 つから見つけました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGRect              bounds = [self bounds];
    UITouch*    touch = [[event touchesForView:self] anyObject];
    firstTouch = YES;
    // Convert touch point from UIView referential to OpenGL one (upside-down flip)
    location = [touch locationInView:self];
    location.y = bounds.size.height - location.y;
}

期待する結果を得るには、タッチを OpenGL 座標に変換する必要があるようです。お役に立てれば。

于 2012-11-05T07:50:05.783 に答える
0

ステータス バーがビューの範囲外にあるためです。また、ステータス バーをタッチすると負の値が表示されます。

これを試して:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    UITouch* touch = [touches anyObject];
    CGPoint point = [touch locationInView:[touch window]];
    NSLog(@"%@", NSStringFromCGPoint(point));
}
于 2012-11-03T19:52:40.657 に答える