Метод возврата CGPoint - PullRequest
       19

Метод возврата CGPoint

0 голосов
/ 12 ноября 2010

Я пытаюсь вернуть CGPoint, но я делаю что-то не так:

Вот мой метод:

- (CGPoint)calculatePointOnCircleFrom:(CGPoint)pointA PointB:(CGPoint)pointB radius:(float)rd {
    float sryy = pointA.y - pointB.y;
    float srxx = pointA.x - pointB.x;
    float sry = pointA.y + sryy;
    float srx = pointA.x + srxx;
    float kpx = pointA.x + cos(atan2(pointA.y - sry, pointA.x - srx)) * rd;
    float kpy = pointA.y + sin(atan2(pointA.y - sry, pointA.x - srx)) * rd;

    return CGPointMake(kpx, kpy);
}

Код в методе работает нормально, но я что-то не так с инициализацией.

Здесь я называю метод:

    point1.position = [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64]; 

и получим ошибку: «несовместимый тип для аргумента 1 из setPosition:»

Ответы [ 4 ]

2 голосов
/ 12 ноября 2010

Если вы посмотрите внимательно, вы увидите, что сообщение относится к несовместимому типу для аргумента 1 метода, называемого setPosition, а не метода calculatePointOnCircleFrom.setPosition является установщиком для свойства position.

Итак, проблема в point1.position = части строки, а не в вызове calculatePointOnCircleFrom метода.Я подозреваю, что свойство position переменной point1 не относится к типу CGPoint, поскольку именно это возвращает метод calculatePointOnCircleFrom.

В качестве альтернативы, вы можете не вызывать метод, который, по вашему мнению, вызываете.

0 голосов
/ 12 ноября 2010

Я решил проблему не идеальным способом, но он работает.

Я возвращаю знаю NSValue:

- (NSValue *)calculatePointOnCircleFrom:(CGPoint)pointA PointB:(CGPoint)pointB radius:(float)rd {
   float sryy = pointA.y - pointB.y;
   float srxx = pointA.x - pointB.x;
   float sry = pointA.y + sryy;
   float srx = pointA.x + srxx;
   float kpx = pointA.x + cos(atan2(pointA.y - sry, pointA.x - srx)) * rd;
   float kpy = pointA.y + sin(atan2(pointA.y - sry, pointA.x - srx)) * rd;

   return [NSValue valueWithCGPoint:CGPointMake(kpx, kpy)];
}

и вызываю метод следующим образом:

NSValue *pos = [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64];
CGPoint cgpos = [pos CGPointValue];
point1.position = cgpos;

Спасибо за помощь: D

0 голосов
/ 12 ноября 2010

Вероятно, есть предупреждение, что он не может найти объявление метода. Похоже, что компилятор не знает, какой тип возвращает метод, и по умолчанию имеет значение id.

0 голосов
/ 12 ноября 2010

Это сообщение об ошибке говорит о том, что тип, возвращаемый [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64], не соответствует типу point1.position.Является ли position CGPoint?

...