views:

29

answers:

1

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

This is the code i have:

    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");  
        }
    }

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

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

Thanks

+1  A: 

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")
}

instead.

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

KennyTM
Am i calculating the radii right?
joec
@joec: No. The radius should be simply `shuttle.bounds.size.width/2`. You're computing the circumference.
KennyTM
Ok, so my view is 200 wide, thus outerRadius = 100, in the first `if`, r2<100*100 will always be true since 10,000 is always bigger. I want the corridor to be say 30 points wide, so innerRadius = 70, so, 70*70 is again always bigger than r2. Should the coordinates be in `shuttle`'s superview as they currently are? Thanks a lot.
joec
@joec: What's your `touch` and `centre`?
KennyTM
centre = {175,200} touch = {198,131}
joec
@joec: `dx` and `dy` should be 23 and -69, thus `r2 == dx*dx+dy*dy` should be 5290. 70*70 = 4900 < 5290 < 10000 = 100*100. Make sure you get these numbers correctly.
KennyTM

related questions