Не могу проверить, не CGPoint не равен CGPointZero

У меня есть CGPoint, объявленный в классе UIView, в моем viewController я пытаюсь проверить, не соответствует ли это CGPoint CGPointZero, но я получаю эту ошибку: Invalid operands to binary expression ('CGPoint' (aka 'struct CGPoint') and 'CGPoint')

Это оператор if:

if (joystick.velocity != CGPointZero)

Ошибка указывает на! =, и я не знаю, почему это дает мне ошибку.

joystick является классом UIView, CGPoint velocity объявляется следующим образом:

@property(nonatomic) CGPoint velocity;

Ответ 1

Попробуйте следующее:

if (!CGPointEqualToPoint(joystick.velocity, CGPointZero))

Объяснение: CGPoint на самом деле является структурой. Двоичный операнд ( "==" или "! =" ) Используется только для сравнения примитивных значений, обычно полезных для сравнения указателей, которые на самом деле являются целыми числами, представляющими собой позицию памяти.

Поскольку у вас есть структура, а не ссылка на что-то, вам придется сравнивать каждое значение внутри вашей структуры, но, к счастью, яблоко уже реализовало макрос, который выполняет это для вас в случае CGPoint.

Если вам интересно, вы можете щелкнуть мышью макрос выше и увидеть реализацию:

__CGPointEqualToPoint(CGPoint point1, CGPoint point2)
{
  return point1.x == point2.x && point1.y == point2.y;
}