Khung của khung xem xác định vị trí của nó trong superview. Giới hạn của lượt xem xác định các vị trí đánh giá phụ của chúng tôi. Điều đó có nghĩa là, nếu bạn thay đổi giới hạn của khung nhìn, vị trí của nó sẽ không bị thay đổi, nhưng tất cả vị trí phụ đề của nó sẽ bị thay đổi.
Chiều rộng và chiều cao dương giống như bạn vẽ chế độ xem từ trên trái sang dưới cùng bên phải, trong khi giá trị âm từ dưới cùng bên phải sang phía trên bên trái. Vì vậy,
frame1 = CGRectMake(100, 100, -50, -50)
là hoàn toàn giống hệt với
frame2 = CGRectMake(50, 50, 50, 50).
Và trên thực tế, nếu bạn init một cái nhìn với frame 1, nó sẽ tự động thay đổi để Frame2.
Nhưng bounds.origin
lượt xem không giống nhau.Bounds.origin
cho biết điểm mà bạn "vẽ" chế độ xem, vì vậy tất cả các khung hình phụ sẽ bắt nguồn tại thời điểm này.
Ví dụ, trong Cảnh iPhone 6, ta có:
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];
Và chúng tôi đã nhận:
Chúng tôi sẽ thấy rằng khung rightView được tự động thay đổi giá trị tích cực, đó là (342, 50, 275, 275), nhưng bounts.origin = (-275,-275)
của nó.
Và chúng ta thêm 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];
Vì vậy, các giới hạn làm cho subview rightView của sau nguồn gốc mà chúng tôi init rightView.
Nếu chúng tôi thay đổi giới hạn của rightView bằng leftView: rightView.bounds = leftView.bounds; Sau đó, hai vị trí subViews giống nhau, chúng tôi đã mất thông tin rằng chiều rộng và chiều cao của rightView là số âm.
Và chúng ta thay đổi giới hạn của leftView thay vì rightView: CGRect vọt = leftView.bounds; bounds.origin = CGPointMake (50, 50); leftView.bounds = bounds;
Chúng ta có thể thấy, frame.origin subview nó được bù đắp bởi bounds.origin (sử dụng trừ đi, không cộng).
Để kết luận:
view.bounds
xác định tất cả các vị trí của nó subview của (bù đắp bởi bounds.origin), trong khi bounds
sẽ không ảnh hưởng đến vị trí riêng của mình trong SuperView của nó.
Nếu bạn bắt đầu chế độ xem có chiều rộng và chiều cao âm, nó sẽ tự động được chuyển thành tích cực (không thay đổi vị trí), nhưng bounds.origin cho biết điểm bạn bắt đầu "vẽ" chế độ xem.
Google đã ẩn mà bài đối với một số lý do không giải thích được - chúng tôi không còn được phép truy cập vào nó (tôi nhận được đưa đến một trang đăng nhập, chuyển hướng buộc từ Google.com) – Adam