質問

私はこれまでの特定のフレームを入力したときに、この場合には、ボタンの面積をものを行うために- (void) touchesMovedを使用しています。

私の問題は、私がフレームに入るとき、私はそれがものをやりたい、である - の のない私は、フレームの内側に私の指を動かしていたとき。

誰もが、私は、フレームの内側に思いながら、一度だけ、私のメソッドを呼び出すと、まだ私はそれを再入力なら、私は同じtouchMoveに再びそれを呼び出すことができるようにする方法を知っています。

ありがとうございます。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event touchesForView:self.view] anyObject];

    CGPoint location = [touch locationInView:touch.view];

    if(CGRectContainsPoint(p1.frame, location))
    {
            //I only want the below to me called 
            // once while I am inside this frame
        [self pP01];
        [p1 setHighlighted:YES];
    }else {
        [p1 setHighlighted:NO];
    }
}
役に立ちましたか?

解決

あなたは、特定のエリアに入った時にコードが既に呼ばれていたかどうかを確認するためにいくつかの属性を使用することができます。 p1オブジェクト(それが何であるかわからない)の強調表示状態が、そのために適切かもしれないように見えます:

if(CGRectContainsPoint(p1.frame, location))
{
   if (!p1.isHighlighted){ // We entered the area but have not run highlighting code yet
        //I only want the below to me called 
        // once while I am inside this frame
      [self pP01];
      [p1 setHighlighted:YES];
   }
}else { // We left the area - so we'll call highlighting code when we enter next time
    [p1 setHighlighted:NO];
}

他のヒント

あなたはtouchesMovedにチェックしtouchesEndedにリセットSimply add a BOOL

if( CGRectContainsPoint([p1 frame],[touch locationInView:self.view])) {
   NSLog (@"Touch Moved over p1");
  if (!p14.isHighlighted) {
   [self action: p1];
   p1.highlighted = YES; 
   }
  }else {
   p1.highlighted = NO;
  }

UIButtonを使用して試してみて、Interface Builderで「タッチドラッグ入力して」接続を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top