insetBy возвращает Inf в CGRect

#ios #objective-c #swift #geometry #core-graphics

#iOS #objective-c #swift #геометрия #ядро-графика

Вопрос:

Я использую insetBy of CGGeometry , но он возвращает inf значение для x и y .

CGGeometry

 public func insetBy(dx: CGFloat, dy: CGFloat) -> CGRect
  

Ниже приведен мой код с выводом :

     let frame = CGRect(x: xOffset[row], y: yOffset[row], width: width, height: height)
    print(frame)     //(0.0, 0.0, 54.0, -3.0)

    let insetFrame = frame.insetBy(dx: 4.0, dy: 2.0)
    print(insetFrame)   //(inf, inf, 0.0, 0.0)
  

Этот кадр вызывает сбой в приложении.
Любая помощь должна быть оценена.

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

1. Что вы подразумеваете под отрицательной высотой? 🙂

2. Моя ошибка в том, что я уловил это, поскольку вычисление высоты является динамическим и зависит от других переменных. Так что пропустите подвох. Спасибо

Ответ №1:

Отрицательный width / height не имеет смысла и, очевидно, нарушает вычисления CGRect.

Просто не используйте отрицательные значения для width и height , и все будет в порядке:

 let frame = CGRect(x: xOffset[row], y: yOffset[row], width: max(8, width), height: max(4, height))
  

Вы можете определить некоторую константу maxInsetX и maxInsetY , чтобы быть уверенным, что ваши начальные кадры никогда не будут меньше, чем 2*maxInset в обоих измерениях.

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

1. На самом деле значение высоты передавалось отрицательным. Спасибо

2. @technerd На самом деле передача 0 не решит проблему, если вы впоследствии вставите в это измерение положительное значение. Смотрите обновленный ответ