3

次の問題があります。UILongPressGestureRecognizerUIViewを「トグルモード」にするためにを使用しています。が「トグルモード」の場合UIView、ユーザーはUIViewを画面上でドラッグできます。UIViewを画面上でドラッグするために、メソッドtouchesBegantouchesMovedを使用していますtouchesEnded

動作しますが、ドラッグするには指を離す必要があります。これは、メソッドがすでに呼び出されているため、再度呼び出されないため、画面touchesBegan全体をドラッグできないためです。UIView

トリガーさtouchesBeganれた後に手動で呼び出す方法はありますか( BOOL値を変更し、このBOOLがYESに設定されている場合にのみ機能します)。UILongPressGestureRecognizerUILongPressGestureRecognizertouchesBegan

4

2 に答える 2

10

UILongPressGestureRecognizertouchesMovedは継続的なジェスチャ認識機能であるため、またはに頼るのではなくUIPanGestureRecognizer、 をチェックするだけですUIGestureRecognizerStateChanged

- (void)viewDidLoad
{
    [super viewDidLoad];

    UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
    [self.view addGestureRecognizer:gesture];
}

- (void)handleGesture:(UILongPressGestureRecognizer *)gesture
{
    CGPoint location = [gesture locationInView:gesture.view];

    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        // user held down their finger on the screen

        // gesture started, entering the "toggle mode"
    }
    else if (gesture.state == UIGestureRecognizerStateChanged)
    {
        // user did not lift finger, but now proceeded to move finger

        // do here whatever you wanted to do in the touchesMoved
    }
    else if (gesture.state == UIGestureRecognizerStateEnded)
    {
        // user lifted their finger

        // all done, leaving the "toggle mode"
    }
}
于 2013-02-06T13:42:51.837 に答える
0

ドラッグに推奨されるジェスチャーとして UIPanGestureRecognizer を使用することをお勧めします。

  1. 最小値を構成できます。そして最大。次のプロパティを使用して、パンに必要なタッチの数:

    最大タッチ数

    最小タッチ数

  2. 必要な状態のアニメーションがあるように、Began、Changed、Ended などの状態を処理できます。

  3. 以下のメソッドを使用して、ポイントを必要な UIView に変換します。

    - (void)setTranslation:(CGPoint)translation inView:(UIView *)view

    例:

    1. 古いフレームを保持するには、グローバル変数を使用する必要があります。UIGestureRecognizerStateBegan でこれを取得します。

    2. 状態が UIGestureRecognizerStateChanged の場合。を使用できます。

    -(void) pannningMyView:(UIPanGestureRecognizer*) panGesture{
    
       if(panGesture.state==UIGestureRecognizerStateBegan){
         //retain the original state
       }else if(panGesture.state==UIGestureRecognizerStateChanged){
       CGPoint translatedPoint=[panGesture translationInView:self.view];
      //here you manage to get your new drag points.
      }
     }
    
  4. ドラッグの速度。速度に基づいて、UIView の跳ね返りを示すアニメーションを提供できます

    - (CGPoint)velocityInView:(UIView *)view

于 2013-02-06T13:38:44.463 に答える