0

iPad用のiOS6アプリを開発しています。ユーザーがビュー内でフィールドをドラッグ、ピンチ、回転できるようにする UITextField のサブクラスをコーディングしました。問題は、回転なしでフィールドをつまむと、ジェスチャが終了した後、編集モードになることです。これは起こらないはずです。これを無効にする行をいくつか追加しましたが、停止しません。ここで私のコード:

- (BOOL) canBecomeFirstResponder{
if (gesturing==YES) {
       return NO;
}else  return YES;
}


 - (void) tapDetected:(UITapGestureRecognizer*) pinchRecognizer {

if (gesturing==NO) {
    [self becomeFirstResponder];
}
}


- (void) pinchDetected:(UIPinchGestureRecognizer*) pinchRecognizer {

CGFloat scale = pinchRecognizer.scale;
self.font = [self.font fontWithSize:self.font.pointSize*(scale)];


//self.transform = CGAffineTransformScale(self.transform, scale, scale);

[self sizeToFit];


pinchRecognizer.scale = 1.0;

if (pinchRecognizer.state == UIGestureRecognizerStateChanged) {
    gesturing =YES;   

}

if (pinchRecognizer.state == UIGestureRecognizerStateBegan) {
    gesturing =YES;

}

if (pinchRecognizer.state == UIGestureRecognizerStateEnded) {
    gesturing =NO;

}


 }


- (void) panDetected:(UIPanGestureRecognizer *)panRecognizer {

CGPoint translation = [panRecognizer translationInView:self.superview];
CGPoint imageViewPosition = self.center;
imageViewPosition.x += translation.x;
imageViewPosition.y += translation.y;

self.center = imageViewPosition;
[panRecognizer setTranslation:CGPointZero inView: self.superview];



if (panRecognizer.state == UIGestureRecognizerStateChanged) {
    gesturing=YES;       

}

if (panRecognizer.state == UIGestureRecognizerStateEnded) {
    gesturing=NO;



}


  }


 - (void) rotationDetected:(UIRotationGestureRecognizer *)rotationRecognizer{  


CGFloat angle = rotationRecognizer.rotation;
self.transform = CGAffineTransformRotate(self.transform, angle);
rotationRecognizer.rotation = 0.0;

if (rotationRecognizer.state == UIGestureRecognizerStateChanged) {

    gesturing = YES;
}

if (rotationRecognizer.state == UIGestureRecognizerStateEnded) {

    gesturing = NO;
}

 }


- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
     }
4

1 に答える 1

1

に初期化しない場合、デフォルト値はgesturingです。適用しようとするたびに、どのジェスチャ認識エンジンが最初に検出されるかをデバッグして把握しましたか? 同時ジェスチャー認識をサポートしているため、 apply を適用すると、指のタッチが として検出される場合があります。その場合、メソッドの条件が満たされ、textField がファーストレスポンダになります。NOYESpinch

pinchpanif(gesturing == NO)tapDetected:

于 2013-06-17T15:57:29.193 に答える