嘿,我正在使用以下代码模仿我的应用程序中的旋钮视图:

- (void) setupGestureRecognizer
{
    CGPoint midPoint = CGPointMake(image.frame.origin.x + image.frame.size.width / 2,
                                   image.frame.origin.y + image.frame.size.height / 2);
    CGFloat outRadius = image.frame.size.width / 2;
    gestureRecognizer = [[OneFingerRotationGestureRecognizer alloc] initWithMidPoint: midPoint
                                                                         innerRadius: outRadius / 10
                                                                          outerRadius: outRadius *2
                                                                              target: self];
    [self.view addGestureRecognizer: gestureRecognizer];
}


这样,gestureRecognizer会处理发生在按钮上或非常接近按钮的所有事件。我想要的是以下内容:


仅当用户触摸内部时,才会触发gestureRecognizer
图片
如果手指离开图像,那么手势识别器应继续
倾听(并计算角度)


在Android上,我这样做如下:

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        float x = e2.getX() / ((float) getWidth());
        float y = e2.getY() / ((float) getHeight());
        float rotDegrees = cartesianToPolar(1 - x, 1 - y);

        [...doing maths stuff here]


我已经使所有旋转的东西都工作了,但是如何像处理Android中的事件一样使手手势识别器工作呢?如果我失去了互联网连接并且别无选择,只能自己完全编码,我将采取两种不同的手势识别器,在处理“ init”按键和一个“跟随”手指的过程中,根据按键设置对应的旋钮在第一个手势识别器中设置的值。但这对我来说似乎是一大堆不良代码,因此,我希望对此提出一些建议。

干杯,亚历克斯

最佳答案

您应该能够使用委托方法gestureRecognizer:shouldReceiveTouch:来检查触摸的位置,并且仅当触摸点在图像视图的范围内时才返回YES(使用CGRectContainsPoint)。如果将手势识别器添加到图像视图的超级视图,则它应继续根据需要“侦听”。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    CGPoint touchPoint = [touch locationInView:self.view];
    return CGRectContainsPoint(self.imageView.frame, touchPoint);
}


另外,请确保将控制器设置为手势识别器的代表。

关于android - iOS使手势识别器在 View 之外进行监听,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29801457/

10-12 03:36