#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 не решит проблему, если вы впоследствии вставите в это измерение положительное значение. Смотрите обновленный ответ