2012-05-10 9 views
1

タッチの位置を記録しようとしています。以下は私のコードです。私が理解する限り、非常に遠い左上隅のタッチは私に(0,0)の位置を与え、非常に遠い右下の角は(768、1024)私が肖像画。しかし、左上隅には(-6、-18)、右下には(761,1003)のような値が得られます。座標が何とかシフトされているように見えます。 {{0,0}、{768、1024}}のself.boundsのトレースがあります。誰かが私にこれを説明することはできますか?私は境界{{0,0}、{768、1024}}の間にあるxとyの値を取得したいと思います。事前にどうもありがとうございました。タッチ位置の値がビューの境界から外れる

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGRect bounds = [self bounds]; 
    NSLog(@"frame: %@", NSStringFromCGRect(bounds)); // this value was traced as frame: {{0, 0}, {768, 1024}} 

    UITouch* touch = [[event touchesForView:self] anyObject]; 
    location = [touch locationInView:self]; 
    NSLog(@"Location: %@", NSStringFromCGPoint(location)); 

} 


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGRect bounds = [self bounds]; 

    UITouch* touch = [[event touchesForView:self] anyObject]; 
    location = [touch locationInView:self]; 
    NSLog(@"Location: %@", NSStringFromCGPoint(location)); 

} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    CGRect bounds = [self bounds]; 

    UITouch* touch = [[event touchesForView:self] anyObject]; 
    location = [touch locationInView:self]; 
    NSLog(@"Location: %@", NSStringFromCGPoint(location)); 

} 
+0

これらの接触は、ビューがメインウィンドウ上でオフセットされているビューコントローラで起こっていますか? – rooster117

+0

これらのタッチメソッドは、UIViewのサブクラスに実装されています。このビューは、ビューコントローラに追加されました。このビューには、x = 0、y = 0、width = 768、height = 1024(サイズインスペクタから)があります。 – HappyAppDeveloper

+0

私の推測では、あなたのインターフェースのビルドが、間違って整列されたビューまたはそれに類するもののように、何とかうんざりしていることでしょう。完全に新しいプロジェクトを作成し、そこで動作するかどうかを確認してください。 – jimpic

答えて

0

y値の-20オフセットは、「ステータスバーが最初に非表示になっています」を「はい」に設定することで修正されます。残りの問題は、ハードウェアの問題のように見えます。これは、iPadでプログラムを実行するたびにxとyの値が異なるためです。私はシミュレータ上でプログラムを実行している間、この問題は発生しませんでした。シミュレータでは、x値の範囲は1〜767で、y値の範囲は1〜1023です。これはかなり正しいです。

0

まだコメントできないので、回答を投稿する必要があります。ビューの背景色を別の色に設定しようとしましたが、その左上隅に確実に表示されるかどうかを確認できましたか?

+0

はい、私はビューの背景色を別の色に設定しようとしました:self.backgroundColor = [UIColor redColor]、それは左上隅にあります。このトレース 'CGRect thisFrame = [self frame]; \t NSString(@ "このフレーム:%@"、NSStringFromCGRect(thisFrame));は{{0,0}、{768,1024}}を返します – HappyAppDeveloper

+0

yの値をSize Inspectorから-20に変更した場合、タッチ位置のy値は正しいようです(0〜1024の範囲)。しかし、私はなぜそれを理解できませんか?それでもx値が正しく見えるようにはできませんでした(左端のタッチにはxが6です)。 私のビューコントローラには、(バックグラウンドで)イメージビューがあります。タッチメソッドを持つビューは、画像ビューの背景の上にView Controllerに追加されます。 – HappyAppDeveloper

+0

境界の代わりに[self frame]を使ってみて、何が起こるかを見てください。 – RileyE

0

は、ここで私はビューのために持っているものだ:

@implementation TouchesView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setUserInteractionEnabled:YES]; 
     [self setBackgroundColor:[UIColor colorWithRed:1.0f green:0.6f blue:0.6f alpha:1.0f]]; 
    } 
    return self; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint touch = [[touches anyObject] locationInView:self]; 
    NSLog(@"(%.1f, %.1f)", touch.x, touch.y); 
    NSLog(@"%@", NSStringFromCGPoint(touch)); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{} 

@end 

そして、これは初期化され、ビューコントローラに追加する:

TouchesView *touchView = [[TouchesView alloc] initWithFrame:self.view.bounds]; 
[self.view addSubview:touchView]; 

これは私のために正常に動作します。

+0

こんにちはRileyE、あなたの助けてくれてありがとう!このコードを試してみると、xとyの値の範囲は何ですか?あなたは0-768と0-1024を得ましたか? – HappyAppDeveloper

+0

私はそれに何の問題もなかった。あなたは偶然、バックグラウンドでオーディオやネットワークアプリケーションを実行していますか?それは間違いなく座標(アプリのステータスバーがアップしている場合 - 個人的なホットスポットやラジオバー)に何らかの干渉を引き起こします。また、あなたのアプリにステータスバーを隠してしまった? – RileyE

+0

はい、ステータスバーを非表示にして、yから-20オフセットを削除しました。しかし、毎回xとyの範囲が(-6,761)と(0,1024)、次に(6,768)と(-6,1017)、そしてその他のものが増え続けました。私はしかし、シミュレータで実行しているときに問題がなかった。シミュレータでは、一貫して(1,767)と(1,1023)を取得します。どう思いますか? – HappyAppDeveloper

関連する問題