0

在 Xcode/iPhone 模拟器中工作,我有一个应用程序UIGestureRecognizers用于捏、点击和平移。在不更改任何代码的情况下,不再识别捏合(我在移动鼠标时按住选项键以显示两个灰色圆圈一起或分开移动)。平移和点击仍然有效。有没有其他人遇到过这个问题?

识别器本身或模拟器似乎有问题,因为下面的捏合代码从未被调用,但它适用于平移。

- (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

请试试这个

将此代码包含到您的项目中

例子.h

CGFloat     lastScale;
CGPoint     lastPoint;

例子.m

-(无效)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 回答
1

又开始自己工作了,UIGestureRecognizer我仍然不知道为什么。它可能很简单,因为我没有按住鼠标按钮,同时也按住选项键,但我想我以前尝试过。

感谢以上建议。

于 2013-01-08T00:34:27.547 回答
0

我在我的 Macbook Air 触控板上使用 XCode 4.5.2 时遇到了同样的问题,我认为 [option]+[single finger touch movement] 会造成挤压(灰球移入/移出)。

但是,您需要应用 [option]+[3-finger touch] 才能工作。

这在模拟器中有效,但在连接的 iOS 设备上运行时却没有帮助。虽然我下载的应用程序可以运行,但在连接到 XCode 的 iPhone 上运行却不行,啊!

于 2013-02-15T19:35:58.140 回答