嘿,我正在使用以下代码模仿我的应用程序中的旋钮视图:
- (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/