2015-01-02 12 views

Odpowiedz

66

TL; DR

Zastosowanie funkcji UIEdgeInsetsInsetRect(theRect, theInsets).

Przykład

// 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}} 

Objaśnienie

  • dodatnia wkładka przesuwa krawędź prostokąta do wewnątrz (w kierunku środkowej prostokąt).
  • Ujemna wstawka przesuwa krawędź na zewnątrz (od środka prostokąta).
  • Wstawka zerowa pozostawi samą krawędź.

Tell Me More

kolejnych przydatnych funkcji do pracy na CGRect s są objęte this note.

+1

Znakomity! Powinienem był się spodziewać, że ta metoda będzie istnieć, ale jestem wdzięczny, że nie musiałem jej intensywnie szukać! ;-) – mbm29414

3

Swift3

Powiedzmy, że chcesz granice, ale minus dwa piksele na dole:

let ei = UIEdgeInsetsMake(0, 0, 2, 0) // TLBR 
    let smaller = UIEdgeInsetsInsetRect(bounds, ei) 

To wszystko.

Jeśli wolisz napisać ją jako jedną linię, to tylko

wziąć dwa off dnie:

let newBounds = UIEdgeInsetsInsetRect(bounds, UIEdgeInsetsMake(0, 0, 2, 0)) 

Cheers

+1

To niezwykłe, że Swift 3 nie uwzględniał tego również jako funkcji w 'CGRect':' rect.insetBy (edgeInset) 'lub coś podobnego. – LucasTizma

+0

Nie, mam na myśli składnię. Zamiast pełnić funkcję gadatliwą, może po prostu operować bezpośrednio na 'CGRect'. – LucasTizma

+0

Jestem świadomy. Ale może być. Podobnie jak wszystkie inne funkcje CGRect. – LucasTizma

Powiązane problemy