Получение более точного результата CGRectContainsPoint - PullRequest
1 голос
/ 10 ноября 2009

Я новичок в публикации на этом форуме, но не могу сказать вам, сколько раз его чтение помогло мне. В настоящее время я работаю над игрой для iPhone, в которой есть сетка UIImageView, которые содержатся в подпредставлении моего gameboardViewController. Я строю сетку на ViewDidLoad. Хорошо, пока. Теперь я использую touchesBegan, чтобы выяснить, какой из UIImageViews был затронут, какой тип работает. Я говорю вроде как, потому что CGRectContainsPoint, похоже, дает ложный результат, означающий, что эта строка считает верхний ряд этой сетки за пределами моего прямоугольника подпредставления.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{

    UITouch *touch = [touches anyObject];
    CGPoint currentLocation = [[touches anyObject] locationInView:self.gridView];

    CGRect gridRect = self.gridView.frame;
    // Since I have an overlay I want to ignore touches when this subview is visible.
    if(self.readyScreen.hidden)
    {
        /* restrict the touches to only the subview gridView so any stray touches should be ignored.*/
        if(CGRectContainsPoint(gridRect,currentLocation) )
        {
            UIImageView *theTile = (UIImageView *)touch.view;
            [self gridItemTouched:theTile];
        }
    }

}

По какой-то причине недостаточно точно видеть, что верхний ряд 50 x 50 UIImageViews находится внутри подпредставления.

Есть предложения?

1 Ответ

2 голосов
/ 10 ноября 2009

Вы преобразуете местоположение крана в систему координат gridView. Но затем вы проверяете, содержится ли этот документ в кадре gridView, который находится в его системе координат суперпредставлений.

У вас есть два варианта, чтобы это исправить:

Либо используйте систему coodinate gridView:

CGPoint currentLocation = [[touches anyObject] locationInView:self.gridView.superview];

Или используйте систему coodinate от superview:

CGRect gridRect = self.gridView.bounds;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...