0

Xcode/iPhone シミュレーターで作業してUIGestureRecognizersいて、ピンチ、タップ、パンで動作するアプリがあります。コードを変更しなければ、ピンチは認識されなくなりました (オプション キーを押したままマウスを動かして、2 つの灰色の円が一緒になったり離れたりするのを示しています)。パンとタップはどちらも機能します。他の誰かがこの問題を経験しましたか?

以下のピンチ用のコードは呼び出されないため、レコグナイザー自体またはシミュレーターに問題があるようですが、パン用には機能します。

- (void)pinch:(UIPinchGestureRecognizer *)gesture
{
NSLog(@"in pinch method");
if ((gesture.state == UIGestureRecognizerStateChanged) ||
    (gesture.state == UIGestureRecognizerStateEnded)) {
    self.scale *= gesture.scale; // adjust our scale
    gesture.scale = 1;           // reset gestures scale so future changes are incremental
}
}

- (void)tap:(UITapGestureRecognizer *)gesture
{
NSLog(@"in tap method");
if (gesture.state == UIGestureRecognizerStateEnded) 
    self.originInPixels = [gesture locationInView:self];
}

マップを適切にロードし、パンとタップが機能する単純な MKMapView を使用して新しいアプリを作成しようとしましたが、ピンチはまだ機能しません。

私はiOS 5.1で作業しています。

何か案は?

4

3 に答える 3

1

UIGestureRecognizerそれ自体で再び働き始めました、そして私はまだ理由がわかりません。マウスボタンを押しながらオプションキーを押しているのと同じくらい簡単だったかもしれませんが、以前に試したと思いました。

上記の提案をありがとう。

于 2013-01-08T00:34:27.547 に答える
1

これを試してください

このコードをプロジェクトに含めます

たとえば .h

CGFloat     lastScale;
CGPoint     lastPoint;

たとえば .m

-(void)viewDidLoad {

    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
    [self addGestureRecognizer:pinchGesture];
    [pinchGesture release];

}

-(void) handlePinch:(UIPinchGestureRecognizer *)gestureRecognizer {

if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
    // Reset the last scale, necessary if there are multiple objects with different scales
    lastScale = [gestureRecognizer scale];
}

if ([gestureRecognizer state] == UIGestureRecognizerStateBegan ||
    [gestureRecognizer state] == UIGestureRecognizerStateChanged) {

    CGFloat currentScale = [[[gestureRecognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];
    NSLog(@"%f",currentScale);
    // Constants to adjust the max/min values of zoom
    const CGFloat kMaxScale = 3.0;
    const CGFloat kMinScale = 1.0;

    CGFloat newScale = 1 -  (lastScale - [gestureRecognizer scale]);

    newScale = MIN(newScale, kMaxScale / currentScale);
    newScale = MAX(newScale, kMinScale / currentScale);
    CGAffineTransform transform = CGAffineTransformScale([[gestureRecognizer view] transform], newScale, newScale);
    NSLog(@"%f",lastScale);
    [gestureRecognizer view].transform = transform;

    lastScale = [gestureRecognizer scale];
}

}

于 2012-12-22T05:38:14.190 に答える
0

XCode 4.5.2 を搭載した MacBook Air トラックパッドでも同じ問題が発生し、[option]+[1 本指のタッチ移動] でピンチ (灰色のボールが内外に移動) すると考えていました。

ただし、[オプション]+[3本指タッチ]を適用する必要があります。

これはシミュレーターでは機能しますが、接続された iOS デバイスで実行している場合は厄介なことに役に立ちません。ダウンロードしたアプリは動作しますが、iPhone を XCode に接続して実行すると動作しません。

于 2013-02-15T19:35:58.140 に答える