Несовместимый тип ‘double’

#objective-c

#objective-c

Вопрос:

Я назначаю CGFloat animatedDistance и получаю эту ошибку.

Здесь я присваиваю значение animatedDistance

 static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 140;
  

heightFraction также является CGFloat .

 if (orientation == UIInterfaceOrientationPortrait ||
    orientation == UIInterfaceOrientationPortraitUpsideDown)
{
   animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
}
else
{
    animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
}
  

Какой тип должен быть animatedDistace? Кто-нибудь может мне помочь?

Ответ №1:

floor возвращает a double . На некоторых платформах CGFloat является float . animatedDistance должно быть введено как a double (при необходимости вы можете преобразовать его в a CGFloat ).

Комментарии:

1. Вы можете неявно выполнять приведение между double и float . Вы можете получить предупреждение, в зависимости от того, насколько параноидальным вы настроили компилятор, но это не серьезная ошибка, если вы не просили об этом.

Ответ №2:

Используйте это, чтобы получить вектор… CGpoint vector = ccpSub(cgpoint 1, cgpoint 2); И если вам нужны двойные / плавающие значения, сделайте это:

CGPoint.Расположение

для чего бы вы ни пытались найти координаты, затем назначьте значение с плавающей CGPoint.location.y точкой и другое значение с плавающей точкой CGPoint.location.x

Для этого, кстати, вам нужен cocos2d. Я думаю.

Комментарии:

1. CGPoint не имеет location элемента; это местоположение. И как ccpSub , который вычитает одну точку из другой, помогает спрашивающему умножить одно расстояние на дробь?

Ответ №3:

Мне кажется, что вы объявили animatedDistance как содержащий какой-то указатель, например NSNumber * , или структуру, например CGSize . В любом случае, вы не можете назначить CGFloat там.

Если animatedDistance содержит объект NSNumber, создайте его вокруг значения. Когда вы задавали этот вопрос, способ сделать это был [NSNumber numberWithDouble:floor(…)] . Теперь вы можете просто использовать @(floor(…)) .

Если animatedDistance содержит a CGSize или другую структуру, вам нужно будет решить для себя, как осмысленно преобразовать из единственного числа, которое у вас есть, в структуру, которую вы хотите.