Vì câu hỏi tôi đã hỏi nhiều lần nên tôi sẽ cung cấp câu trả lời chi tiết về nó. Hãy sửa đổi nó nếu bạn muốn thêm nội dung chính xác hơn.
Đầu tiên một bản tóm tắt về câu hỏi: khung, giới hạn và trung tâm và các mối quan hệ của họ.
Khung A view frame( CGRect) là vị trí của hình chữ nhật trong superviewhệ tọa độ của nó. Theo mặc định, nó bắt đầu ở trên cùng bên trái.
Giới hạn Một khung nhìn bounds( CGRect) biểu thị hình chữ nhật khung nhìn trong hệ tọa độ của chính nó.
Trung tâm A centerđược CGPointbiểu thị dưới dạng superviewhệ tọa độ và nó xác định vị trí của điểm trung tâm chính xác của chế độ xem.
Lấy từ vị trí UIView +, đây là các mối quan hệ (chúng không hoạt động theo mã vì chúng là các phương trình không chính thức) trong số các thuộc tính trước đó:
LƯU Ý: Các mối quan hệ này không áp dụng nếu các chế độ xem được xoay. Để biết thêm thông tin, tôi sẽ đề nghị bạn xem hình ảnh sau đây được lấy từ The Kitchen Drawer dựa trên khóa học Stanford CS193p . Tín dụng vào @Rhubarb .

Sử dụng framecho phép bạn định vị lại và / hoặc thay đổi kích thước một khung nhìn trong phạm vi của nó superview. Thông thường có thể được sử dụng từ một superview, ví dụ, khi bạn tạo một khung nhìn cụ thể. Ví dụ:
// view1 will be positioned at x = 30, y = 20 starting the top left corner of [self view]
// [self view] could be the view managed by a UIViewController
UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(30.0f, 20.0f, 400.0f, 400.0f)];
view1.backgroundColor = [UIColor redColor];
[[self view] addSubview:view1];
Khi bạn cần tọa độ để vẽ bên trong, viewbạn thường tham khảo bounds. Một ví dụ điển hình có thể là vẽ trong một viewcuộc phỏng vấn dưới dạng một hình nhỏ của cái đầu tiên. Vẽ các cuộc phỏng vấn đòi hỏi phải biết giám boundssát. Ví dụ:
UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 400.0f, 400.0f)];
view1.backgroundColor = [UIColor redColor];
UIView* view2 = [[UIView alloc] initWithFrame:CGRectInset(view1.bounds, 20.0f, 20.0f)];
view2.backgroundColor = [UIColor yellowColor];
[view1 addSubview:view2];
Hành vi khác nhau xảy ra khi bạn thay đổi boundsquan điểm. Ví dụ: nếu bạn thay đổi bounds size, các framethay đổi (và ngược lại). Sự thay đổi xảy ra xung quanh centerquan điểm. Sử dụng mã dưới đây và xem những gì xảy ra:
NSLog(@"Old Frame %@", NSStringFromCGRect(view2.frame));
NSLog(@"Old Center %@", NSStringFromCGPoint(view2.center));
CGRect frame = view2.bounds;
frame.size.height += 20.0f;
frame.size.width += 20.0f;
view2.bounds = frame;
NSLog(@"New Frame %@", NSStringFromCGRect(view2.frame));
NSLog(@"New Center %@", NSStringFromCGPoint(view2.center));
Hơn nữa, nếu bạn thay đổi, bounds originbạn thay đổi originhệ tọa độ bên trong của nó. Theo mặc định, originnó nằm ở (0.0, 0.0)(góc trên cùng bên trái). Ví dụ: nếu bạn thay đổi origincho view1bạn có thể thấy (nhận xét mã trước đó nếu bạn muốn) bây giờ là góc trên cùng bên trái để view2chạm vào mã view1. Động lực khá đơn giản. Bạn nói với view1rằng góc trái trên của nó bây giờ là ở vị trí (20.0, 20.0)nhưng vì view2's frame originbắt đầu từ (20.0, 20.0), họ sẽ trùng.
CGRect frame = view1.bounds;
frame.origin.x += 20.0f;
frame.origin.y += 20.0f;
view1.bounds = frame;
Đại origindiện cho viewvị trí của nó trong vị trí của nó superviewnhưng mô tả vị trí của boundstrung tâm.
Cuối cùng, boundsvà originkhông phải là khái niệm liên quan. Cả hai đều cho phép xuất phát framequan điểm (Xem các phương trình trước).
Nghiên cứu trường hợp của View1
Đây là những gì xảy ra khi sử dụng đoạn mã sau.
UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(30.0f, 20.0f, 400.0f, 400.0f)];
view1.backgroundColor = [UIColor redColor];
[[self view] addSubview:view1];
NSLog(@"view1's frame is: %@", NSStringFromCGRect([view1 frame]));
NSLog(@"view1's bounds is: %@", NSStringFromCGRect([view1 bounds]));
NSLog(@"view1's center is: %@", NSStringFromCGPoint([view1 center]));
Hình ảnh tương đối.

Điều này thay vì những gì xảy ra nếu tôi thay đổi [self view]giới hạn như sau.
// previous code here...
CGRect rect = [[self view] bounds];
rect.origin.x += 30.0f;
rect.origin.y += 20.0f;
[[self view] setBounds:rect];
Hình ảnh tương đối.

Ở đây bạn nói [self view]rằng góc trên cùng bên trái của nó bây giờ nằm ở vị trí (30.0, 20.0) nhưng vì view1nguồn gốc khung bắt đầu từ (30.0, 20.0), chúng sẽ trùng nhau.
Tài liệu tham khảo bổ sung (để cập nhật với các tài liệu tham khảo khác nếu bạn muốn)
Giới thiệu clipsToBounds(nguồn Apple doc)
Đặt giá trị này thành CÓ làm cho các cuộc phỏng vấn được cắt bớt trong giới hạn của người nhận. Nếu được đặt thành NO, các khung hình có khung hình vượt ra ngoài giới hạn hiển thị của máy thu sẽ không bị cắt bớt. Giá trị mặc định là không.
Nói cách khác, nếu một khung nhìn framelà (0, 0, 100, 100)và khung nhìn của nó là (90, 90, 30, 30), bạn sẽ chỉ thấy một phần của khung nhìn đó. Cái sau sẽ không vượt quá giới hạn của quan điểm phụ huynh.
masksToBoundstương đương với clipsToBounds. Thay vào đó UIView, thuộc tính này được áp dụng cho a CALayer. Dưới mui xe, clipsToBoundsgọi masksToBounds. Để tham khảo thêm, hãy xem Làm thế nào là mối quan hệ giữa clipToBound của UIView và mặt nạ ToBound của CALay? .