UIImageView и CGRectIntersectRect (Xcode) - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть 2 UIImageViews, размеры которого составляют 50x50 и 60x60 пикселей.

Я использую метод CGRectIntersectRect, чтобы определить, когда одно изображение касается другого.Но эти 2 изображения представляют собой 2 шара, и иногда код определяет, что эти изображения касаются самих себя, когда «своими глазами» видно, что они не касаются.Это происходит потому, что шары не "покрывают" все пространства изображения.Таким образом, углы изображений ясны, но, конечно, код не заботится об этом.

Вопрос: как я могу решить?как я могу определить рамки изображений, которые идеально соответствуют окружности шаров?

1 Ответ

2 голосов
/ 20 декабря 2011

Если вы уверены, что изображение в UIImageView s всегда будет кружком (или UIImageView s всегда будет квадратом), то вы можете сделать что-то вроде

CGRect frame1 = image1.frame;
CGRect frame2 = image2.frame;
CGPoint center1 = CGPointMake(CGRectGetMidX(frame1), CGRectGetMidY(frame1));
CGPoint center2 = CGPointMake(CGRectGetMidX(frame2), CGRectGetMidY(frame2));

CGFloat dx = center1.x - center2.x;
CGFloat dy = center2.x - center2.y;
float squaredDistance = dx * dx + dy * dy;

CGFloat radius1 = frame1.size.width/2;
CGFloat radius2 = frame2.size.width/2;
CGFloat minDistance = radius1 + radius2;
if (squaredDistance <= minDistance * minDistance) {
    //Intersect
} else {
    //Do not intersect
}

Я пытался сделать все параметрическим, но, конечно, если фиксированные кадры UIImageView, то вы можете написать более простой код, используя, например, директивы #define.

Например, если вы знаете, что первое изображение 50х50, а второе 60х60, вы можете написать что-то вроде

#define RADIUS1 25
#define RADIUS2 30

и упростите ваш код.

Я предположил, что каждый круг вписан в рамку UIImageView. Если нет, то вы должны знать точное соотношение для правильного измерения радиуса. (Намного проще вписать круги в рамки.)

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