¿Puedo ajustar un CGRect con UIEdgeInsets?
(3)
2018 ... Swift4
Digamos que quiere los límites,
pero por ejemplo menos dos píxeles en la parte inferior :
let ei = UIEdgeInsetsMake(0, 0, 2, 0) // top-left-bottom-right
let smaller = UIEdgeInsetsInsetRect(bounds, ei)
Eso es.
Si prefiere escribirlo como una línea , es solo
Tome dos de la parte inferior:
let newBounds = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, 2, 0))
Aclamaciones
Tengo un CGRect
y me gustaría ajustarlo con UIEdgeInsets
.
Parece que tal vez podría haber una función incorporada que hace esto. He buscado un CGRectAdjustByInsets
o funciona con algún otro prefijo de CGRect…
pero no encontré nada.
¿Debería codificar el mío?
TL; DR
Use la función UIEdgeInsetsInsetRect(theRect, theInsets)
.
Ejemplo
// CGRectMake takes: left, bottom, width, height.
const CGRect originalRect = CGRectMake(0, 0, 100, 50);
// UIEdgeInsetsMake takes: top, left, bottom, right.
const UIEdgeInsets insets = UIEdgeInsetsMake(10, 10, -20, -20);
// Apply the insets…
const CGRect adjustedRect = UIEdgeInsetsInsetRect(originalRect, insets);
// What''s the result?
NSLog(@"%@ inset by %@ is %@",
NSStringFromCGRect(originalRect),
NSStringFromUIEdgeInsets(insets),
NSStringFromCGRect(adjustedRect));
// Logs out…
// {{0, 0}, {100, 50}} inset by {10, 10, -20, -20} is {{10, 10}, {110, 60}}
Explicación
- Un recuadro positivo mueve el borde del rectángulo hacia adentro (hacia el centro del rectángulo).
- Un recuadro negativo mueve el borde hacia afuera (lejos del rectángulo).
- Un recuadro cero dejará solo el borde.
Dime más
Otras funciones útiles para operar en CGRect
están cubiertas por esta nota .
Todavía 2018 ... Swift 4.2
Creo que la nueva forma se ve mejor ...
let newCGRect = oldCGRect.inset(by: UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8))