UIView触摸位置坐标 [英] UIView touch location coordinates

查看:112
本文介绍了UIView触摸位置坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在UIView及其对应的超级视图中使用的坐标是什么?我有此代码,我想检测用户可以触摸的走廊 ...类似于此图像:替代文字http://img17.imageshack.us/img17/4416/bildschirmfoto20100721u.png

What are the coordinates used in UIViews and their corresponding superviews? I have this code which i would like to detect a 'corridor' where the user can touch... similar to this image:alt text http://img17.imageshack.us/img17/4416/bildschirmfoto20100721u.png

这是代码i有:

    CGPoint touch = [recognizer locationInView:[shuttle superview]];
    CGPoint centre = shuttle.center;

    int outerRadius = shuttle.bounds.size.width/2;
    int innerRadius = (shuttle.bounds.size.width/2) - 30;
    if ((touch.x < outerRadius && touch.y <outerRadius)){
        NSLog(@"in outer");
        if(touch.x > innerRadius && touch.y > innerRadius) {
            NSLog(@"in corridor");  
        }
    }

半径大约为500和600,而 touch x和y分别是100和200 ...

The radii are approximately 500 and 600, and the touch x and y are 100 and 200...

因此,走廊中的NSLog永远不会被调用。

Thus, the NSLog "in corridor" never gets called.

谢谢

推荐答案

您的条件错误。根据它的走廊是一个正方形,其中心在(0,0),而不是 shuttle.center 。尝试

Your condition is wrong. The corridor according to it is a square, with its center at (0, 0) instead of shuttle.center. Try

CGFloat dx = touch.x - centre.x;
CGFloat dy = touch.y - centre.y;
CGFloat r2 = dx*dx + dy*dy;
if (r2 < outerRadius*outerRadius) {
  NSLog(@"in outer");
  if (r2 > innerRadius*innerRadius)
    NSLog(@"in corridor")
}

相反。

即使走廊确实应该是正方形,也应使用 fabs( dx),fabs(dy)不是 touch.x,touch.y

Even if the corridor is indeed expected to be a square, you should check with fabs(dx), fabs(dy) not touch.x, touch.y.

这篇关于UIView触摸位置坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆