2016-10-19 2 views
0

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

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

Что вы подразумеваете под отрицательной высотой? :) – alexburtnik

+0

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

ответ

2

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

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

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

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

+0

Фактически значение высоты передавалось отрицательным. Спасибо – technerd

+0

@technerd Фактически передача 0 не решит проблему, если после этого вы установите это измерение с положительным значением. См. Обновленный ответ – alexburtnik

Смежные вопросы