di vista determina la sua posizione nel superview. I limiti della vista determinano le sue posizioni di subviews. Ciò significa che, se cambi i limiti della vista, la sua posizione non verrà modificata, ma verrà modificata la sua posizione di sottoview.
larghezza e l'altezza positivo è come si disegna una vista da in alto a sinistra in basso a destra, mentre il valore negativo è da basso a destra per in alto a sinistra. Così
frame1 = CGRectMake(100, 100, -50, -50)
è totalmente identico
frame2 = CGRectMake(50, 50, 50, 50).
E in effetti, se si init una vista con frame1, sarà modificate automaticamente a frame2.
Ma la bounds.origin
dei punti di vista non sono identici.Bounds.origin
indica il punto in cui "si disegna" la vista, quindi tutti i fotogrammi di sottoview avranno origine a questo punto.
Ad esempio, nel Paesaggio iPhone 6, abbiamo:
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 275, 275)];
leftView.backgroundColor = [UIColor greenColor];
[self.view addSubview:leftView];
UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(667-50, 375-50, -275, -275)];
rightView.backgroundColor = [UIColor blueColor];
[self.view addSubview:rightView];
E abbiamo ottenuto:

Troveremo quel lasso di rightView passa automaticamente a valore positivo, che è (342, 50, 275, 275), ma è il suo bounts.origin = (-275,-275)
.
e si aggiungono subviews:
UIView *leftSubview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
leftSubview.backgroundColor = [UIColor grayColor];
[leftView addSubview:leftSubview];
UIView *rightSubview= [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
rightSubview.backgroundColor = [UIColor grayColor];
[rightView addSubview:rightSubview];

Quindi i limiti rende visualizzazione secondaria di rightView segue l'origine, che abbiamo init rightView.
Se cambiamo i limiti di rightView è uguale a leftView: rightView.bounds = leftView.bounds; Quindi la posizione delle due sottoview è la stessa, abbiamo perso le informazioni che la larghezza e l'altezza di rightView sono negative.

E cambiamo i limiti della leftView invece di rightView: CGRect Bounds = leftView.bounds; bounds.origin = CGPointMake (50, 50); leftView.bounds = bounds;

Possiamo vedere, frame.origin del suo visualizzazione secondaria è compensato da bounds.origin (utilizzando meno, non più).
Per concludere:
view.bounds
determina tutte le posizione del suo visualizzazione secondaria (compensato da bounds.origin), mentre bounds
non influirà la propria posizione nella sua superview.
Se si avvia una vista con larghezza e altezza negative, verrà automaticamente modificato in positivo (che non cambierà la posizione), ma il suo bounds.origin indica il punto in cui si inizia a "disegnare" la vista.
Google ha nascosto quel post per qualche inspiegabile ragione - non siamo più permesso di accedervi (vengo portato in una pagina di login, un redirect forzata da Google.com) – Adam